2 Star 5 Fork 4

航耍耍/mql4

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
WSFR_D2HL_2(readable).mq4 132.75 KB
一键复制 编辑 原始数据 按行查看 历史
航耍耍 提交于 2021-11-09 08:24 . 123123123123
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423

extern string _TP = "务眍忭 怩钿睇?镟疣戾蝠?";
//---
extern int TICK =0; //--- 玎镳弪 镳?蜩赍 镳邂帼?珥圜屙桢 .羼腓 =0 蝾 铗觌.
extern int TakeProfit = 36; //--- (10 2 60)
extern int StopLoss = 35; //--- (100 10 200)
extern bool UseStopLevels = TRUE; //--- 玛膻麇龛?耱铒钼 铕溴痤? 篷腓 恹觌屙? 蝾 疣犷蜞 蝾朦觐 忤痱筻朦睇?蝈殛??腩耨?
extern bool CloseOnlyProfit = TRUE;
//---
extern int SecureProfit = 2; //--- (0 1 5) 蔓忸??徨珞猁蝾?
extern int SecureProfitTriger = 8; //--- (10 2 30)
extern int MaxLossPoints = -65; //--- (-200 5 -20) 锑犟桁嚯? 镳铖噤赅 潆 玎牮? 铕溴痤?Buy ?Sell 镳?桤戾礤龛?耔沩嚯?(橡?镳铖噤赍 疣忭铋 铗 - MaxLossPoints 桦?戾睃 (磬镳桁屦 镳栳?0), 铕溴?玎牮铄蝰)
extern double Commis =0;
extern string _PO = "相疣戾蝠?勿溴痤?";
extern bool MarketOrder =TRUE;
extern double OrderDOP =2; //綦嚆 - 滂耱囗鲨 漕腓忸黜钽?瘥眍黜钽?铕溴疣 . 羼腓 = 0 - 铗觌.
extern double KDOP =2; //祉铈栩咫?腩蜞 漕腓忸黜钽?瘥眍黜钽?铕溴疣
extern bool ModifDOP =FALSE;
extern bool ModifTake =FALSE;
extern double LimitOrder = 1; //綦嚆 - 滂耱囗鲨 腓扈蝽钽?铕溴疣 . 羼腓 = 0 - 铗觌.
extern double TimeL =11; //怵屐 耧桊圉梃 腓扈蝽钽?铕溴疣
extern double KLimit =1.5; //祉铈栩咫?腩蜞 腓扈蝽钽?铕溴疣
extern bool DeleteLimit = TRUE;//綦嚆 箐嚯屙? 腓扈蝽钽?铕溴疣 镳?耱铒腩皴 汶噔眍泐 ?徨珞猁蜿?
extern bool DeleteLimitU = TRUE; //綦嚆 箐嚯屙? 腓扈蝽钽?铕溴疣 镳?铗耋蝰蜮梃 篑腩忤?铗牮?
extern double StopOrder = 0; //綦嚆 - 滂耱囗鲨 耱铒钼钽? 铕溴疣
extern double TimeS =20; //怵屐 耧桊圉梃 耱铒钼钽? 铕溴疣
extern int DOPS = 2; //篑腩忤?镳铖噤觇 汶噔眍泐 瘥眍黜钽?铕溴疣 潆 铗牮? 耱铒钼钽??镨?
extern double KStop =1; //祉铈栩咫?腩蜞 耱铒钼钽?铕溴疣
extern bool ModifStop = TRUE; //綦嚆 祛滂翳赅鲨?耱铒钼钽?铕溴疣 镳?筲咫梓屙梃 滂耱囗鲨?铗 鲥睇 ( 耦躔囗屙桢 滂耱囗鲨?镳?甯 筲咫梓屙梃)
extern bool Stop = TRUE;
//+--------------------------------------------------------------------------------------------------------------+
//| 茵嚯
//+--------------------------------------------------------------------------------------------------------------+
extern string _tral = "袜耱痤殛?蝠嚯?";
extern double TrailingStop = 0; // 0 -恹觌屙 羼腓 戾礤? 蝾 ?漕??铗 镳铘栩?磬镳. 0.25... 羼腓 犷脲? 蝾 钺睇?
extern double TrailingStep = 0; // ?蝠嚯?
extern double Utral = 10; // 忮腓麒磬 镳铘栩?镳?觐蝾痤?怅膻鬣弪? 蝠嚯
extern string _MM = "袜耱痤殛?MM";
//---
extern double StartLot = 0; // 腩?镥疴钽?铕漤疣 . 羼腓 = 0 蝾 =祆 羼腓 犷朦 0 蝾 =StartLot
extern bool RecoveryMode = TRUE; //--- 玛膻麇龛?疱骅爨 忸耨蜞眍怆屙? 溴镱玷蜞 (筲咫梓屙桢 腩蜞 羼腓 耠篦桦? 耱铒-腩耨)
extern double FixedLot = 0.01; //--- 澡犟桊钼囗睇?钺?腩蜞
extern double AutoMM = 10; //--- 烫 怅膻鬣弪? 羼腓 AutoMM > 0. 橡铞屙?痂耜? 橡?RecoveryMode = FALSE, 戾?螯 眢骓?蝾朦觐 ?珥圜屙桢.
extern double MaximalLot = 1000;
extern double AutoMM_Max = 20.0; //--- 锑犟桁嚯 痂耜
extern int MaxAnalizCount = 50; //--- 阻耠?玎牮 疣礤?铕溴痤?潆 囗嚯桤?锐镱朦珞弪? 镳?RecoveryMode = True)
extern double Risk = 25.0; //--- 需耜 铗 溴镱玷蜞 (锐镱朦珞弪? 镳?RecoveryMode = True)
extern double RiskFreeMargin = 0.5;//爨犟桁嚯铄 耦铗眍龛?爨疰??疋钺钿睇?耩邃耱忄?镳?疣聍蛤?腩蜞 漕? 铕溴痤?
extern double RiskMargin = 0; //运烂 ?盐我臀嘏腿?汤衅??崖瘟文哇?研拍岩吕?闲?饰椅形?抢闲乓 我市垡冗
extern double MultiLotPercent = 2; //--- 暑翳鲨屙?箪眍驽龛?腩蜞 (锐镱朦珞弪? 镳?RecoveryMode = True)
//+--------------------------------------------------------------------------------------------------------------+
//| 襄痂钿?桧滂赅蝾痤? 暑?忸 徉痤?潆 赅驿钽?桧滂赅蝾疣.
//+--------------------------------------------------------------------------------------------------------------+
extern string _indl = "袜耱痤殛?桧滂赅蝾痤?LONG";
//--- 襄痂钿?桧滂赅蝾痤?(翌驽 祛骓?狍溴?玎铒蜩螯, 蜞?赅?潆 赅驿铋 镟瘥 疋铊)
extern int iMA_PeriodLONG = 55; //--- (60 5 100)
extern int iCCI_PeriodLONG = 18; //--- (10 2 30)
extern int iATR_PeriodLONG = 14; //--- (10 2 30)
extern int iWPR_PeriodLONG = 11; //--- (10 1 20)
extern int iMA_LONG_Open_a = 18; //--- (4 2 20) 澡朦蝠 汤 潆 铗牮? Buy ?Sell (象眚?
extern int iMA_LONG_Open_b = 39; //--- (14 2 50) 澡朦蝠 汤 潆 铗牮? Buy ?Sell (象眚?
extern int iWPR_LONG_Open_a = 1; //--- (-100 1 0) 澡朦蝠 WPR 潆 铗牮? Buy ?Sell
extern int iWPR_LONG_Open_b = 5; //--- (-100 1 0) 澡朦蝠 WPR 潆 铗牮? Buy ?Sell
extern int FilterWL = 5;
extern int FilterCL = 250;
extern string _indsh = "袜耱痤殛?桧滂赅蝾痤?SHORT";
extern int iMA_PeriodShort = 55; //--- (60 5 100)
extern int iCCI_PeriodShort = 18; //--- (10 2 30)
extern int iATR_PeriodShort = 14; //--- (10 2 30)
extern int iWPR_PeriodShort = 11; //--- (10 1 20)
extern int iMA_Short_Open_a = 15; //--- (4 2 20) 澡朦蝠 汤 潆 铗牮? Buy ?Sell (象眚?
extern int iMA_Short_Open_b = 39; //--- (14 2 50) 澡朦蝠 汤 潆 铗牮? Buy ?Sell (象眚?
extern int iWPR_Short_Open_a = 1; //--- (-100 1 0) 澡朦蝠 WPR 潆 铗牮? Buy ?Sell
extern int iWPR_Short_Open_b = 5; //--- (-100 1 0) 澡朦蝠 WPR 潆 铗牮? Buy ?Sell
extern int FilterWS = 95;
extern int FilterCS = 250;
//+--------------------------------------------------------------------------------------------------------------+
//| 相疣戾蝠?铒蜩扈玎鲨?潆 镳噔桦 铗牮? ?玎牮? 镱玷鲨?
//+--------------------------------------------------------------------------------------------------------------+
extern string _Add_Op = "朽聒桊屙睇?镟疣戾蝠?铒蜩扈玎鲨?";
//---
extern string _AddOpenFilters = "---";
extern int FilterATR = 6; //--- (0 1 10) 橡钼屦赅 磬 怩钿 镱 ATR 潆 Buy ?Sell (if (iATR_Signal <= FilterATR * pp) return (0);) (!) 填骓?礤 铒蜩螯
extern double iCCI_OpenFilter = 170; //--- (100 10 400) 澡朦蝠 镱 iCCI 潆 Buy ?Sell. 橡?铒蜩扈玎鲨?镱?JPY 疱觐戾礓箦祛 铒蜩螯 镱 镳噔桦?(100 50 4000)
extern string _CloseOrderFilters = "---";
//---
extern int Price_Filter_Close = 14; //--- (10 2 20) 澡朦蝠 鲥睇 铗牮? 潆 玎牮? Buy ?Sell (象眚?
extern int iWPR_Filter_Close = 90; //--- (0 1 -100) 澡朦蝠 WPR 潆 玎牮? Buy ?Sell
extern int PWPR_Close = 15;
extern int TF_Close = 15;
//+--------------------------------------------------------------------------------------------------------------+
//| 朽聒桊屙睇?磬耱痤殛?
//+--------------------------------------------------------------------------------------------------------------+
extern string _Add = "朽聒桊屙睇?磬耱痤殛?";
extern int NormalizeLot = 2; //--- 眍痨嚯桤圉? 腩蜞 羼腓 扈?腩?=0.1 蝾 =1 羼腓 驽 =0.01 蝾 =2
extern double Slippage = 2;
extern double Korrect =10;
extern bool AccountOrder =FALSE;//--- 篦蛤 铕溴痤?镳?铗牮. 漕镱腠栩咫. 羼腓 =true 蝾 篦栩噱?蝾朦觐 铖眍忭铋 羼腓 =false 蝾 怦?
extern string _zap = "袜耱痤殛?- 綦嚆??钽疣龛麇龛";
extern bool Long = TRUE; //--- 蔓觌囹咫?潆桧睇?镱玷鲨?
extern bool Short = TRUE; //--- 蔓觌囹咫?觐痤蜿桴 镱玷鲨?
extern double MaxSpread = 2;
extern int AccountBar =1;//--- 玎镳弪 铗牮? ?徉疱 =螋
extern double BalansMargin =0;//綦嚆 怅膻麇龛 ?耦铗眍龛 爨疰?/ 疋钺钿睇?耩邃耱忄
extern int MaxDop = 0;//綦嚆 怅膻麇龛 ?钽疣龛麇龛 觐腓麇耱忄 漕? 铕溴痤?
extern bool VirtuaiModif = TRUE;
extern bool PAUSE_NEWS = FALSE; //綦嚆 怅膻麇龛 镟箸?
//+--------------------------------------------------------------------------------------------------------------+
//| 奏覃 疣犷螓 耧屦蜞
//+--------------------------------------------------------------------------------------------------------------+
extern string News = "吗屐 蝾疸钼铋 镟箸?";
extern double HOUR_START_PAUSE =14;//鬣?磬鬣豚 镟箸?
extern double HOUR_END_PAUSE = 1; //鬣?铌铐鬣龛 镟箸?
extern double DEI_START_PAUSE = 5; //溴睃 磬鬣豚 镟箸?
extern double DEI_END_PAUSE = 1; //溴睃 铌铐鬣龛 镟箸?
extern double START_PAUSE =0; //怵屐 ?綦嚆 磬鬣豚 彐邃礤忭钽?镥疱瘥忄
extern double END_PAUSE = 6; //怵屐 铌铐鬣龛 彐邃礤忭钽?镥疱瘥忄
extern int MagicNumber = 777;
extern int MagicNumber1 = 888;
extern color LC1=Gold;
extern color LC=Lime;
//+--------------------------------------------------------------------------------------------------------------+
//| 岭铌 漕镱腠栩咫 镥疱戾眄
//+--------------------------------------------------------------------------------------------------------------+
double pp;
int pd,z=0,K;
double cf;
string EASymbol; //--- 义牦?耔焘铍
double CloseSlippage = 3; //--- 橡铖赅朦琨忄龛?潆 玎牮? 铕溴疣
int SP;
int CloseSP;
int MaximumTrades = 1;
double NDMaxSpread; //--- 锑犟桁嚯 耧疱?忖桎?矬黻蝾?
bool CheckSpreadRule; //--- 橡噔桦?潆 镳钼屦觇 耧疱溧 镥疱?铗牮桢?(务蜞磬怆桠噱?玎鲨觌桠囗桢 耦钺龛??镳邂屙眍?耧疱溴)
string OpenOrderComment = "WSFR";
int RandomOpenTimePercent = 0; //--- 锐镱朦珞弪? 镳?玎?蝾?镱蝾赍 觐祆囗?蝈痨桧嚯? 疋铄狃噻磬 疱礓铎磬 镟箸? 蔓疣驵弪? ?皴牦礓圊.
//---
//--- 相疣戾蝠?潆 噔蝾腩蜞
double MinLot = 0.01;
double MaxLot = 0.01;
double LotStep = 0.01;
int LotValue = 100000;
double FreeMargin = 1000.0;
double LotPrice = 1;
double LotSize;
//--- 相疣戾蝠?磬 铗牮桢
int iWPR_Filter_OpenLong_a;
int iWPR_Filter_OpenLong_b;
int iWPR_Filter_OpenShort_a;
int iWPR_Filter_OpenShort_b;
//--- 相疣戾蝠?磬 玎牮桢
int iWPR_Filter_CloseLong;
int iWPR_Filter_CloseShort;
//---
color OpenBuyColor = Green;
color OpenSellColor = Red;
color CloseBuyColor = DodgerBlue;
color CloseSellColor = DeepPink;
//---
bool SoundAlert = TRUE; //--- 氢箨钼铄 铒钼妁屙桢 钺 铗牮梃/玎牮梃 皲咫觇
string SoundFileAtOpen = "alert.wav";
string SoundFileAtClose = "alert.wav";
int Dist = 1; //--- 念镱腠栩咫 翳朦蝠 镳钼屦觇 鲥睇 镱耠?铗牮? 铕溴疣.
bool OpenAddOrderRule = FALSE; //--- 橡?怅膻麇龛?溧眄铋 蝾疸钼腓 眍恹?铕溴疣 礤 狍潴?礤 狍潴?铗牮囹. 湾钺躅滂爨 羼腓 恹 疱腓 铖蜞眍忤螯 蝾疸钼膻, 眍 礤 躅蜩蝈 黩钺?耦忮蝽桕 蝈??铗牮 桁 铕溴疣.
///////////////////////////////////////////
//+--------------------------------------------------------------------------------------------------------------+
//| INIT. 软桷栲腓玎鲨 礤觐蝾瘥?镥疱戾眄, 箐嚯屙桢 钺牝钼 磬 沭圄桕?
//+--------------------------------------------------------------------------------------------------------------+
void init() {
//+--------------------------------------------------------------------------------------------------------------+
EASymbol = Symbol(); //--- 软桷栲腓玎鲨 蝈牦眍 耔焘铍?
//---
if (Digits < 4) {
pp = 0.01;
pd = 2;
cf = 0.009;
} else {
pp = 0.0001;
pd = 4;
cf = 0.00009;
}
if (Digits == 4)K=1;
if (Digits == 5)K=10;
if (Digits == 3)K=Korrect;
if (Digits == 2)K=Korrect/10;
//---
SP = Slippage * MathPow(10, Digits - pd); //--- 朽聍弪 镳铖赅朦琨忄龛 鲥睇 潆 ?蜩珥嚓?
CloseSP = CloseSlippage * MathPow(10, Digits - pd);
NDMaxSpread = NormalizeDouble(MaxSpread * pp, pd + 1); //--- 橡孱狃噻钼囗桢 珥圜屙? MaxSpread ?矬黻螓
//--- 软桷栲腓玎鲨 镟疣戾蝠钼 潆 MM
MinLot = MarketInfo(Symbol(), MODE_MINLOT);
MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);
if(MaxLot > MaximalLot)MaxLot = MaximalLot;
LotValue = MarketInfo(Symbol(), MODE_LOTSIZE);
LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
FreeMargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
//--- 项塍麇龛?珥圜屙? 耱铊祛耱?腩蜞 觐黻疱蝽钽?耔焘铍?桉躅? 桤 镟疣祢屦钼 忄泐 狃铌屦?
double SymbolBid = 0;
if (StringSubstr(AccountCurrency(), 0, 3) == "JPY") {
SymbolBid = MarketInfo("USDJPY" + StringSubstr(Symbol(), 6), MODE_BID);
if (SymbolBid > 0.1) LotPrice = SymbolBid;
else LotPrice = 84;
}
//---
if (StringSubstr(AccountCurrency(), 0, 3) == "GBP") {
SymbolBid = MarketInfo("GBPUSD" + StringSubstr(Symbol(), 6), MODE_BID);
if (SymbolBid > 0.1) LotPrice = 1 / SymbolBid;
else LotPrice = 0.6211180124;
}
//---
if (StringSubstr(AccountCurrency(), 0, 3) == "EUR") {
SymbolBid = MarketInfo("EURUSD" + StringSubstr(Symbol(), 6), MODE_BID);
if (SymbolBid > 0.1) LotPrice = 1 / SymbolBid;
else LotPrice = 0.7042253521;
}
//--- 相疣戾蝠?磬 铗牮桢
iWPR_Filter_OpenLong_a = iWPR_LONG_Open_a;
iWPR_Filter_OpenLong_b = iWPR_LONG_Open_b;
iWPR_Filter_OpenShort_a = 100 - iWPR_Short_Open_a;
iWPR_Filter_OpenShort_b = 100 - iWPR_Short_Open_b;
//--- 相疣戾蝠?磬 玎牮桢
iWPR_Filter_CloseLong = iWPR_Filter_Close;
iWPR_Filter_CloseShort = 100 - iWPR_Filter_Close;
//---
return (0);
}
//+--------------------------------------------------------------------------------------------------------------+
//| DEINIT. 愉嚯屙桢 钺牝钼 磬 沭圄桕?
//+--------------------------------------------------------------------------------------------------------------+
int deinit() {
//+--------------------------------------------------------------------------------------------------------------+
ObjectDelete("P");
ObjectDelete("Spread");
ObjectDelete("lot");
ObjectDelete("lot1");
ObjectDelete("lot2");
ObjectDelete("lot3");
ObjectDelete("NP");
ObjectDelete("NP1");
//---
return (0);
}
//+--------------------------------------------------------------------------------------------------------------+
//| START. 橡钼屦赅 磬 铠栳觇, ?蜞赕?耱囵?趔黻鲨?Scalper.
//+--------------------------------------------------------------------------------------------------------------+
int start() {
//+--------------------------------------------------------------------------------------------------------------+
// 滦盘?.....................................................
int pa =0;
if(Hour()>= START_PAUSE&&Hour()<END_PAUSE&& START_PAUSE>0)
{pa=1;}
if(DayOfWeek()>=DEI_START_PAUSE&&Hour()>=HOUR_START_PAUSE && PAUSE_NEWS == true)
{pa=1;}
if(DayOfWeek()<=DEI_END_PAUSE&&Hour()<=HOUR_END_PAUSE && PAUSE_NEWS == true )
{pa=1;}
if( pa==1)
{
ObjectCreate("P", OBJ_LABEL, 0, 0, 0, 0, 0);
ObjectSet("P", OBJPROP_CORNER, 2);
ObjectSet("P", OBJPROP_YDISTANCE, 75);
ObjectSet("P", OBJPROP_XDISTANCE, 10);
ObjectSetText("P", "吓信雄? " , 20, "Tahoma", Red);
}
if( pa==0) ObjectDelete("P");
CloseOrders(); //--- 杨镳钼铈溴龛?铕溴痤?
ModifyOrders(); //--- 蔓忸??徨珞猁蝾?
if(OrderDOP > 0)Dmarket(pa);
if(LimitOrder > 0)Dlimit(pa);
if(StopOrder > 0)Dstop(pa);
if(ModifDOP == TRUE)Grafik();
if((Ask-Bid)>MaxSpread*Point*K)
{
ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0, 0, 0);
ObjectSet("Spread", OBJPROP_CORNER, 2);
ObjectSet("Spread", OBJPROP_YDISTANCE, 45);
ObjectSet("Spread", OBJPROP_XDISTANCE, 10);
ObjectSetText("Spread", "Spread ! " + DoubleToStr((Ask - Bid) / Point, 0), 20, "Tahoma", Red);
}
if((Ask-Bid)<MaxSpread*Point*K)ObjectDelete("Spread");
if (TICK>0&&iVolume(Symbol(),1,0)>TICK)return(0);
//--- 软桷栲腓玎鲨 钺爨 皲尻?
if (AutoMM > 0.0 && (!RecoveryMode)) LotSize = MathMax(MinLot, MathMin(MaxLot, MathCeil(MathMin(AutoMM_Max, AutoMM) / LotPrice / 100.0 * AccountFreeMargin() / LotStep / (LotValue / 100)) * LotStep));
if (AutoMM > 0.0 && RecoveryMode) LotSize = CalcLots(); //--- 篷腓 怅膻麇?RecoveryMode 桉镱朦珞屐 CalcLots
if (AutoMM == 0.0) LotSize = FixedLot;
if (DayOfWeek() == 1 && iVolume(NULL, PERIOD_D1, 0) < 5.0) return (0);
if (StringLen(EASymbol) < 6) return (0);
if ((!IsTesting()) && IsStopped()) return (0);
if ((!IsTesting()) && !IsTradeAllowed()) return (0);
if ((!IsTesting()) && IsTradeContextBusy()) return (0);
HideTestIndicators(FALSE);
//---羊疣蝈汨_殃嚯桧鉥1==TRUE&&0.03
//if(iATR(Symbol(),15,3,0)>iATR(Symbol(),15,3,3)&&iATR(Symbol(),1440,1,0)>0.001)//||(iATR(Symbol(),15,2,0)<0.001&&iATR(Symbol(),1440,1,0)>iATR(Symbol(),1440,1,1)))
// {
if(pa==0)Scalper();
// }
ObjectCreate("lot", OBJ_LABEL, 0, 0, 0, 0, 0);
ObjectSet("lot", OBJPROP_CORNER, 2);
ObjectSet("lot", OBJPROP_YDISTANCE, 95);
ObjectSet("lot", OBJPROP_XDISTANCE, 10);
ObjectSetText("lot", "Lot = " + DoubleToStr(LotSize,2), 10, "Tahoma", Lime);
if( OrderDOP>0 )
{
ObjectCreate("lot1", OBJ_LABEL, 0, 0, 0, 0, 0);
ObjectSet("lot1", OBJPROP_CORNER, 2);
ObjectSet("lot1", OBJPROP_YDISTANCE, 115);
ObjectSet("lot1", OBJPROP_XDISTANCE, 10);
ObjectSetText("lot1", "LotDop = " + DoubleToStr(KDOP*LotSize,2), 10, "Tahoma", DodgerBlue);
}
if( LimitOrder>0 )
{
ObjectCreate("lot2", OBJ_LABEL, 0, 0, 0, 0, 0);
ObjectSet("lot2", OBJPROP_CORNER, 2);
ObjectSet("lot2", OBJPROP_YDISTANCE, 135);
ObjectSet("lot2", OBJPROP_XDISTANCE, 10);
ObjectSetText("lot2", "LimiLot = " + DoubleToStr(KLimit*LotSize,2), 10, "Tahoma", DodgerBlue);
}
if( StopOrder>0 )
{
ObjectCreate("lot3", OBJ_LABEL, 0, 0, 0, 0, 0);
ObjectSet("lot3", OBJPROP_CORNER, 2);
ObjectSet("lot3", OBJPROP_YDISTANCE, 155);
ObjectSet("lot3", OBJPROP_XDISTANCE, 10);
ObjectSetText("lot3", "StopLot = " + DoubleToStr(KStop*LotSize,2), 10, "Tahoma", DodgerBlue);
}
return (0);
}
//+--------------------------------------------------------------------------------------------------------------+
//| Scalper. 务眍忭? 趔黻鲨. 秧圜嚯?镳铊玮钿栩? 镳钼屦赅 耧疱溧, 溧脲?镳钼屦赅 耔沩嚯钼 磬 怩钿.
//+--------------------------------------------------------------------------------------------------------------+
void Scalper() {
//+--------------------------------------------------------------------------------------------------------------+
//--- 杨钺龛??镳邂屙眍?耧疱溴
if (MaxSpreadFilter()) {
CheckSpreadRule = TRUE;
} else {
CheckSpreadRule = FALSE;
if (OpenLongSignal() && OpenTradeCount() && Long) OpenPosition(OP_BUY);
if (OpenShortSignal() && OpenTradeCount() && Short) OpenPosition(OP_SELL);
}
return (0);
}
//+--------------------------------------------------------------------------------------------------------------+
//| OpenPosition. 泽黻鲨 铗牮? 镱玷鲨?
//+--------------------------------------------------------------------------------------------------------------+
int OpenPosition(int OpType) {
//+--------------------------------------------------------------------------------------------------------------+
int bl=0,sl=0,bs=0,ss=0,rb=0,rs=0,zap=0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol())
{
if (OrderType()==OP_BUYLIMIT&&OrderMagicNumber()==MagicNumber)bl=1;
if (OrderType()==OP_SELLLIMIT&&OrderMagicNumber()==MagicNumber)sl=1;
if (OrderType()==OP_SELLSTOP&&OrderMagicNumber()==MagicNumber)ss=1;
if (OrderType()==OP_BUYSTOP&&OrderMagicNumber()==MagicNumber)bs=1;
if (OrderMagicNumber()==MagicNumber||OrderMagicNumber()==MagicNumber1&&
BalansMargin*AccountMargin()>AccountFreeMargin()&&BalansMargin>0)zap=1;
}
}
int B=0,S=0;
int RandomOpenTime; //--- 青溴疰赅 镱 怵屐屙?磬 铗牮桢
double DistLevel; //--- 皱磬 镱牦镪?桦?镳钿噫? 湾钺躅滂爨 潆 镳钼屦觇 滂耱囗鲨?铗牮?
color OpenColor; //--- 肘弪 铗牮? 镱玷鲨? 篷腓 Buy 蝾 泐塍徉, 羼腓 Sell 蝾 牮囫磬
int OpenOrder; //--- 悟牮桢 镱玷鲨?
int OpenOrderError; //--- 硒栳赅 铗牮?
string OpTypeString; //--- 橡孱狃噻钼囗? 忤溧 镱玷鲨??蝈犟蝾忸?珥圜屙桢
double OpenPrice; //--- 皱磬 铗牮?
//---
double TP, SL;
double OrderTP = NormalizeDouble (TakeProfit * pp , pd); //--- 橡孱狃噻箦?蝈殛-镳铘栩 ?忤?Points
double OrderSL = NormalizeDouble (StopLoss * pp , pd); //--- 橡孱狃噻箦?耱铒-腩耨 ?忤?Points
//--- 青溴疰赅 ?皴牦礓圊 戾驿?铗牮?扈
if (RandomOpenTimePercent > 0) {
MathSrand(TimeLocal());
RandomOpenTime = MathRand() % RandomOpenTimePercent;
Sleep(1000 * RandomOpenTime);
}
double OpenLotSize = LotSize;
if (StartLot>0)OpenLotSize=StartLot;
if (AccountFreeMarginCheck(EASymbol, OpType, OpenLotSize) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
return (-1);
}
RefreshRates();
if (OpType == OP_BUY) {
B=1;
OpenPrice = NormalizeDouble(Ask, Digits);
OpenColor = OpenBuyColor;
if (UseStopLevels) { //--- 篷腓 怅膻麇睇 耱铒-箴钼龛 (耱铒-腩耨 ?蝈殛-镳铘栩)
TP = NormalizeDouble(OpenPrice + OrderTP, Digits); //--- 翌 疣聍栩噱?蝈殛-镳铘栩
SL = NormalizeDouble(OpenPrice - OrderSL, Digits); //--- ?耱铒-腩耨
} else {TP = 0; SL = 0;}
} else {
S=1;
OpenPrice = NormalizeDouble(Bid, Digits);
OpenColor = OpenSellColor;
if (UseStopLevels) {
TP = NormalizeDouble(OpenPrice - OrderTP, Digits);
SL = NormalizeDouble(OpenPrice + OrderSL, Digits);
}
else {TP = 0; SL = 0;}
}
int MaximumTradesCount = MaximumTrades; //--- 痒弪麒?铗牮 镱玷鲨?
while (MaximumTradesCount > 0 && OpenTradeCount()) { //--- 篷腓 MaximumTrades 疣忭?躅?猁 1-祗, 蝾 镳铊聃钿栩 铗牮桢
//---OpenOrder =
if (MarketOrder==TRUE&&B==1&&zap==0)OrderSend(EASymbol, OP_BUY, OpenLotSize, NormalizeDouble(Ask, Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
if (MarketOrder==TRUE&&S==1&&zap==0)OrderSend(EASymbol, OP_SELL, OpenLotSize, NormalizeDouble(Bid, Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
if (LimitOrder>0&&B==1&&bl==0&&zap==0)OrderSend(EASymbol, OP_BUYLIMIT, OpenLotSize, NormalizeDouble(Bid-LimitOrder*Point*K, Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
if (LimitOrder>0&&S==1&&sl==0&&zap==0)OrderSend(EASymbol, OP_SELLLIMIT, OpenLotSize, NormalizeDouble(Ask+LimitOrder*Point*K, Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
if (Stop == TRUE&&StopOrder>0&&B==1&&bl==0&&zap==0)OrderSend(EASymbol, OP_BUYSTOP, OpenLotSize, NormalizeDouble(Ask+StopOrder*Point*K, Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
if (Stop == TRUE&&StopOrder>0&&S==1&&sl==0&&zap==0)OrderSend(EASymbol, OP_SELLSTOP, OpenLotSize, NormalizeDouble(Bid-StopOrder*Point*K, Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
Sleep(MathRand() / 1000);
if (OpenOrder < 0) {
OpenOrderError = GetLastError();
if (OpenOrderError != 136/* OFF_QUOTES */) break; //--- 篷腓 礤?鲥? 蝾 镳尻疣屐 鲨觌
if (!(OpenAddOrderRule)) break; //--- 篷腓 礤?疣琊屮屙? 磬 铗牮桢 镱玷鲨? 蝾 镳尻疣屐 鲨觌
Sleep(6000);
RefreshRates();
if (OpType == OP_BUY) DistLevel = NormalizeDouble(Ask, Digits); //--- 项塍鬣屐 眍恹?鲥睇 镱牦镪??镳钿噫?
else DistLevel = NormalizeDouble(Bid, Digits);
if (NormalizeDouble(MathAbs((DistLevel - OpenPrice) / pp), 0) > Dist) break; //--- 马圜嚯?忸玮疣弪 噌耦膻蝽铄 珥圜屙桢 疣珥桷?戾驿?蝈牦?牦瘃铎 ?鲥眍?铗牮?, 溧脲?耩噔龛忄弪 镱塍麇眄铄 ?珥圜屙桢 耦 珥圜屙桢?镥疱戾眄铋 Dist
OpenPrice = DistLevel;
MaximumTradesCount--; if (MaximumTradesCount > 0) {
}
}
else {
if (OrderSelect(OpenOrder, SELECT_BY_TICKET)) OpenPrice = OrderOpenPrice();
if (!(SoundAlert)) break;
PlaySound(SoundFileAtOpen);
break;
}
}
return (OpenOrder);
}
//+--------------------------------------------------------------------------------------------------------------+
//| ModifyOrders. 填滂翳赅鲨 铕溴痤??徨珞猁蝾?
//+--------------------------------------------------------------------------------------------------------------+
void ModifyOrders() {
//+--------------------------------------------------------------------------------------------------------------+
bool TicketModify; //--- 青牮桢 铕溴疣
int total = OrdersTotal() - 1;
int ModifyError ;
int ModifyTicketID ;
int kbar;
string ModifyOrderType ;
//---
for (int i = total; i >= 0; i--) { //--- 痒弪麒?铗牮 铕溴痤?
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType() == OP_BUY) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol&&OrderStopLoss()==0&&OrderTakeProfit()==0) {
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()- StopLoss*Point*K,Digits), NormalizeDouble(OrderOpenPrice()+TakeProfit*Point*K,Digits), 0, Blue);
}
}
if (OrderType() == OP_SELL) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol&&OrderStopLoss()==0&&OrderTakeProfit()==0) {
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+ StopLoss*Point*K,Digits), NormalizeDouble(OrderOpenPrice()-TakeProfit*Point*K,Digits), 0, Blue);
}
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
if (OrderType() == OP_BUY) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol&&OrderStopLoss()==0&&OrderTakeProfit()!=0) {
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()- StopLoss*Point*K,Digits), OrderTakeProfit(), 0, Blue);
}
}
if (OrderType() == OP_SELL) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol&&OrderStopLoss()==0&&OrderTakeProfit()!=0) {
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+ StopLoss*Point*K,Digits), OrderTakeProfit(), 0, Blue);
}
}
if (OrderType() == OP_BUY) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol&&OrderStopLoss()!=0&&OrderTakeProfit()==0) {
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(),OrderStopLoss(), NormalizeDouble(OrderOpenPrice()+TakeProfit*Point*K,Digits), 0, Blue);
}
}
if (OrderType() == OP_SELL) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol&&OrderStopLoss()!=0&&OrderTakeProfit()==0) {
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(),OrderStopLoss(), NormalizeDouble(OrderOpenPrice()-TakeProfit*Point*K,Digits), 0, Blue);
}
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
//--- 填滂翳赅鲨 铕溴疣 磬 镱牦镪?
if (OrderType() == OP_BUY) {
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol)
{
if(SecureProfit*K<MarketInfo(Symbol(),MODE_STOPLEVEL)&&OrderStopLoss()<OrderOpenPrice()&&VirtuaiModif==TRUE)
{
kbar=iBarShift(NULL,PERIOD_M1,OrderOpenTime(),false)+1;
double HN =iHigh(NULL,PERIOD_M1,iHighest(NULL,PERIOD_M1,MODE_HIGH,kbar,0));
if(HN - OrderOpenPrice()-(Ask-Bid)>= K*SecureProfitTriger*Point&&Bid- OrderOpenPrice()<=K*SecureProfit*Point&&Bid>OrderOpenPrice())
OrderClose(OrderTicket(),OrderLots(),Bid,CloseSP,CLR_NONE);
}
if (Bid - OrderOpenPrice() > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() + SecureProfit * pp - OrderStopLoss()) >= Point
&&NormalizeDouble(OrderOpenPrice() + SecureProfit * pp, Digits)-Point>=OrderStopLoss())
{
if(SecureProfit *K>=MarketInfo(Symbol(),MODE_STOPLEVEL))
{
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() + SecureProfit * pp, Digits), OrderTakeProfit(), 0, Blue);
if (!TicketModify){
ModifyError = GetLastError();
}
}
}
}
}
//--- 填滂翳赅鲨 铕溴疣 磬 镳钿噫?
if (OrderType() == OP_SELL)
{
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1 && OrderSymbol() == EASymbol)
{
if(SecureProfit*K <MarketInfo(Symbol(),MODE_STOPLEVEL)&&OrderStopLoss()>OrderOpenPrice()&&VirtuaiModif==TRUE)
{
kbar=iBarShift(NULL,PERIOD_M1,OrderOpenTime(),false)+1;
double HL =iLow(NULL,PERIOD_M1,iLowest(NULL,PERIOD_M1,MODE_LOW,kbar,0));
if( OrderOpenPrice()- HL-(Ask-Bid) >= K*SecureProfitTriger*Point&& OrderOpenPrice()-Ask <= K*SecureProfit*Point&&Ask<OrderOpenPrice())
OrderClose(OrderTicket(),OrderLots(),Ask,CloseSP,CLR_NONE);
}
if (OrderOpenPrice() - Ask > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() - SecureProfit * pp - OrderStopLoss()) >= Point
&&NormalizeDouble(OrderOpenPrice() - SecureProfit * pp, Digits)+Point<=OrderStopLoss())
{
if(SecureProfit * K>=MarketInfo(Symbol(),MODE_STOPLEVEL))
{
TicketModify = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() - SecureProfit * pp, Digits), OrderTakeProfit(), 0, Red);
if (!TicketModify){
ModifyError = GetLastError();
}
}
}
}
}
//................................................................................................
if(TrailingStop>1&&(OrderMagicNumber()== MagicNumber||OrderMagicNumber()== MagicNumber1))
{
if(OrderType() == OP_SELL&&OrderOpenPrice() - Ask > Utral*Point*K)
{
if(TrailingStop> 0&&TrailingStop > 1)
{
if(OrderOpenPrice() - Ask > TrailingStop * Point*K)
{
if(OrderStopLoss()-Point* TrailingStep*K > (Ask + Point* TrailingStop*K)&&Ask + Point * TrailingStop*K<=OrderStopLoss()-Point)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop*K,
OrderTakeProfit(),0, CLR_NONE);
// return(0);
}
}
}
}
else
if(OrderType() == OP_BUY&&Bid - OrderOpenPrice() > Utral*Point*K)//||OrderMagicNumber()== MAGIC1)
{
if(TrailingStop > 0&&TrailingStop > 1)
{
if(Bid - OrderOpenPrice() > TrailingStop * Point*K)
{
if(OrderStopLoss()+Point* TrailingStep*K < (Bid - Point * TrailingStop*K)&&Bid - Point * TrailingStop*K>=OrderStopLoss()+Point)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop*K,
OrderTakeProfit() ,0, CLR_NONE);
// return(0);
}
}
}
}
}
//-----------------------------------------------------------------------------
if(TrailingStop<1&&(OrderMagicNumber()== MagicNumber||OrderMagicNumber()== MagicNumber1))
{
if(OrderType() == OP_SELL&&TrailingStop < 1)
{
if(TrailingStop> 0)
{
if(OrderOpenPrice() - Ask > Utral*Point*K)
{
if(OrderStopLoss()-Point* TrailingStep*K > Ask + (OrderOpenPrice()-Ask)*TrailingStop&& Ask + (OrderOpenPrice()-Ask)*TrailingStop<=OrderStopLoss()-Point)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + (OrderOpenPrice()-Ask)*TrailingStop,
OrderTakeProfit(),0, CLR_NONE);
// return(0);
}
}
}
}
else
if(OrderType() == OP_BUY)
{
if(TrailingStop > 0&&TrailingStop < 1)
{
if(Bid - OrderOpenPrice() > Utral*Point*K)
{
if(OrderStopLoss()+Point* TrailingStep*K < Bid - (Bid - OrderOpenPrice())*TrailingStop&&Bid - (Bid - OrderOpenPrice())*TrailingStop>=OrderStopLoss()+Point)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (Bid - OrderOpenPrice())*TrailingStop ,
OrderTakeProfit() ,0, CLR_NONE);
}
}
}
}
}
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
}
} //--- 青牮桢 for (int i = total - 1; i >= 0; i--)
return ;
}
//+--------------------------------------------------------------------------------------------------------------+
//| CloseTrades. 妈痱筻朦睇?蝈殛-镳铘栩 ?耱铒-腩耨.
//| 篷腓 怅膻麇磬 趔黻鲨 UseStopLevels, 蝾 桉镱朦珞弪? 赅?趔黻鲨 疱珏疴眍泐 玎牮?.
//+--------------------------------------------------------------------------------------------------------------+
void CloseOrders() {
//+--------------------------------------------------------------------------------------------------------------+
int c =0,c1=0;
bool TicketClose; //--- 青牮桢 铕溴疣
int total = OrdersTotal() - 1;
int OpenLongOrdersCount = 0;
int OpenShortOrdersCount = 0;
int MaxCount = 3;
int CloseError ;
int CloseTicketID ;
string CloseOrderType ;
int MinCount;
//---
for (int i = total; i >= 0; i--) { //--- 痒弪麒?铗牮 铕溴痤?
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
CloseTicketID = OrderTicket();
CloseOrderType = OrderType();
//--- 青牮桢 镱 镳铘栩?桦?腩耨?铕溴痤?磬 镱牦镪?
if (OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1)
{
if (OrderType() == OP_BUY&&OrderSymbol() == EASymbol) {
OpenLongOrdersCount++;
if ( CloseOnlyProfit==FALSE)
{
if (Bid >= OrderOpenPrice() + TakeProfit * pp || Bid <= OrderOpenPrice() - StopLoss * pp || CloseLongSignal(OrderOpenPrice(), ExistPosition()))
{
for ( MinCount = 1; MinCount <= MathMax(1, MaxCount); MinCount++)
{
RefreshRates();
if (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), CloseSP, CloseBuyColor))
{
OpenLongOrdersCount--; //--- 吾眢?屐 聍弪麒?
break;
}
else
{
CloseError = GetLastError();
}
}
}
}
if ( CloseOnlyProfit==TRUE)
{
if (Bid>=OrderOpenPrice()+K*Point&&(Bid >= OrderOpenPrice() + TakeProfit * pp || Bid <= OrderOpenPrice() - StopLoss * pp || CloseLongSignal(OrderOpenPrice(), ExistPosition())))
{
for ( MinCount = 1; MinCount <= MathMax(1, MaxCount); MinCount++)
{
RefreshRates();
if (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), CloseSP, CloseBuyColor))
{
OpenLongOrdersCount--; //--- 吾眢?屐 聍弪麒?
break;
}
else
{
CloseError = GetLastError();
}
}
}
}
} //--- 青牮桢 if (OrderType() == OP_BUY)
//--- 青牮桢 镱 镳铘栩?桦?腩耨?铕溴痤?磬 镳钿噫?
if (OrderType() == OP_SELL&&OrderSymbol() == EASymbol) {
OpenShortOrdersCount++;
if (CloseOnlyProfit==FALSE )
{
if (Ask <= OrderOpenPrice() - TakeProfit * pp || Ask >= OrderOpenPrice() + StopLoss * pp || CloseShortSignal(OrderOpenPrice(), ExistPosition()))
{
for (MinCount = 1; MinCount <= MathMax(1, MaxCount); MinCount++)
{
RefreshRates();
if (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), CloseSP, CloseSellColor))
{
OpenShortOrdersCount--; //--- 吾眢?屐 聍弪麒?
break;
}
else {
CloseError = GetLastError();
}
}
}
}
if (CloseOnlyProfit==TRUE )
{
if (Ask<=OrderOpenPrice()-K*Point&&(Ask <= OrderOpenPrice() - TakeProfit * pp || Ask >= OrderOpenPrice() + StopLoss * pp || CloseShortSignal(OrderOpenPrice(), ExistPosition())))
{
for (MinCount = 1; MinCount <= MathMax(1, MaxCount); MinCount++)
{
RefreshRates();
if (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), CloseSP, CloseSellColor))
{
OpenShortOrdersCount--; //--- 吾眢?屐 聍弪麒?
break;
}
else {
CloseError = GetLastError();
}
}
}
}
} //--- 青牮桢 if (OrderType() == OP_SELL)
}
} //--- 青牮桢 for (int i = total - 1; i >= 0; i--) {
}
return ;
}
//+--------------------------------------------------------------------------------------------------------------+
//| OpenLongSignal. 谚沩嚯 磬 铗牮桢 潆桧眍?镱玷鲨?
//+--------------------------------------------------------------------------------------------------------------+
bool OpenLongSignal() {
//+--------------------------------------------------------------------------------------------------------------+
int zp = 0;
bool result = false;
bool result1 = false;
bool result2 = false;
bool result3 = false;
bool result4 = false;
double fu = 0;
double fd = 0;
//--- 朽聍弪 铖眍忭 耔沩嚯钼 磬 怩钿 B
double iClose_Signal = iClose(NULL,15, 1);
//double iMA_Signal =iCustom(NULL,15,"JMA",iMA_PeriodLONG,0,3000,0,1);
double iMA_Signal = iMA(NULL, PERIOD_M15, iMA_PeriodLONG, 0, MODE_SMMA, PRICE_HIGH, 1);
double iWPR_Signal = iStochastic(NULL, PERIOD_M15,iWPR_PeriodLONG,1,1, MODE_SMA, 0, MODE_MAIN,1);//iWPR(NULL, PERIOD_M15, iWPR_Period, 1);
double iATR_Signal = iATR(NULL, PERIOD_M15, iATR_PeriodLONG, 1);
double iCCI_Signal = iCCI(NULL,PERIOD_M15 , iCCI_PeriodLONG, PRICE_TYPICAL, 1);
//---
double iMA_Filter_a = NormalizeDouble(iMA_LONG_Open_a*pp,pd);
double iMA_Filter_b = NormalizeDouble(iMA_LONG_Open_b*pp,pd);
double BidPrice = Bid; //--- (iClose_Signal >= BidPrice) 佯噔礤龛?桎蛤 桁屙眍 ?Bid (?礤 ?Ask, 赅?漕腈眍 猁螯), 蜞?赅?鲥磬 玎牮? 疋鬻?iClose_Signal 纛痨桊箦蝰 磬 铖眍忄龛?珥圜屙? Bid
//---
//double M2 =iMFI(NULL,1,3,1);
double M1 =iMFI(NULL,15,3,1);
double M2 =iMFI(NULL,15,3,2);
double M =iMFI(NULL,5,3,1);
double M5 =iMFI(NULL,15,1,3);
double M3 =iMFI(NULL,15,3,1);
double M4 =iMFI(NULL,15,1,1);
//--- 砚屦屐 耔沩嚯 镱 酪??邈?翳朦蝠铎
if (iATR_Signal <= FilterATR * pp||M1==100)//||M==100)//||M2==0)
return (0);
if (iClose_Signal - iMA_Signal > iMA_Filter_a && iClose_Signal - BidPrice >= - cf && iWPR_Filter_OpenLong_a > iWPR_Signal) result1 = true;
else result1 = false;
if (iClose_Signal - iMA_Signal > iMA_Filter_b && iClose_Signal - BidPrice >= - cf && - iCCI_OpenFilter > iCCI_Signal) result2 = true;
else result2 = false;
if (iClose_Signal - iMA_Signal > iMA_Filter_b && iClose_Signal - BidPrice >= - cf && iWPR_Filter_OpenLong_b > iWPR_Signal) result3 = true;
else result3 = false;
if ( FilterWL>0&&M4>M3&& FilterWL > iWPR_Signal||( - FilterCL > iCCI_Signal&&FilterCL!=0)) result4 = true;
//
else result4 = false;
if (result1 == true || result2 == true || result3 == true || result4 == true)
result = true;
else result = false;
//---
return (result);
}
//+--------------------------------------------------------------------------------------------------------------+
//| OpenShortSignal. 谚沩嚯 磬 铗牮桢 觐痤蜿铋 镱玷鲨?
//+--------------------------------------------------------------------------------------------------------------+
bool OpenShortSignal() {
//+--------------------------------------------------------------------------------------------------------------+
int zp = 0;
bool result = false;
bool result1 = false;
bool result2 = false;
bool result3 = false;
bool result4 = false;
double fu = 0;
double fd = 0;
//--- 朽聍弪 铖眍忭 耔沩嚯钼 磬 怩钿 S
double iClose_Signal = iClose(NULL,15 , 1);
//double iMA_Signal =iCustom(NULL,15,"JMA",iMA_PeriodShort,0,3000,0,1);
double iMA_Signal = iMA(NULL, PERIOD_M15, iMA_PeriodShort, 0, MODE_SMMA, PRICE_LOW, 1);
double iWPR_Signal = iStochastic(NULL, PERIOD_M15,iWPR_PeriodShort,1,1, MODE_SMA, 0, MODE_MAIN,1);//iWPR(NULL, PERIOD_M15, iWPR_Period, 1);
double iATR_Signal = iATR(NULL, PERIOD_M15, iATR_PeriodShort, 1);
double iCCI_Signal = iCCI(NULL, PERIOD_M15, iCCI_PeriodShort, PRICE_TYPICAL, 1);
//---
double iMA_Filter_a = NormalizeDouble(iMA_Short_Open_a*pp,pd);
double iMA_Filter_b = NormalizeDouble(iMA_Short_Open_b*pp,pd);
double BidPrice = Bid;
//---
double M1 =iMFI(NULL,15,3,1);
double M2 =iMFI(NULL,1,3,1);
double M =iMFI(NULL,5,3,1);
double M3 =iMFI(NULL,15,3,1);
double M4 =iMFI(NULL,15,1,1);
//double M5 =iMFI(NULL,15,1,3);
//--- 砚屦屐 耔沩嚯 镱 酪??邈?翳朦蝠铎
if (iATR_Signal <= FilterATR * pp||M1==0)//||M==0)//||M2==0)
return (0);
if (iMA_Signal - iClose_Signal > iMA_Filter_a && iClose_Signal - BidPrice <= cf && iWPR_Signal > iWPR_Filter_OpenShort_a) result1 = true;
else result1 = false;
if (iMA_Signal - iClose_Signal > iMA_Filter_b && iClose_Signal - BidPrice <= cf && iCCI_Signal > iCCI_OpenFilter) result2 = true;
else result2 = false;
if (iMA_Signal - iClose_Signal > iMA_Filter_b && iClose_Signal - BidPrice <= cf && iWPR_Signal > iWPR_Filter_OpenShort_b) result3 = true;
else result3 = false;
if ( FilterWS>0&&M4<M3 &&iWPR_Signal > FilterWS||(iCCI_Signal > FilterCS&&FilterCS!=0)) result4 = true;
else result4 = false;
if (result1 == true || result2 == true || result3 == true || result4 == true) result = true;
else result = false;
//---
return (result);
}
//+--------------------------------------------------------------------------------------------------------------+
//| CloseLongSignal. 谚沩嚯 磬 玎牮桢 潆桧眍?镱玷鲨?
//+--------------------------------------------------------------------------------------------------------------+
bool CloseLongSignal(double OrderPrice, int CheckOrders) {
//+--------------------------------------------------------------------------------------------------------------+
bool result = false;
bool result1 = false;
bool result2 = false;
//---
double iWPR_Signal = iStochastic(NULL, TF_Close,PWPR_Close,1,1, MODE_SMA, 0, MODE_SIGNAL,1);//iWPR(NULL, PERIOD_M15, iWPR_Period, 1);
double iClose_Signal = iClose(NULL, TF_Close, 1);
double iOpen_CloseSignal = iOpen(NULL, PERIOD_M1, 1);
double iClose_CloseSignal = iClose(NULL, PERIOD_M1, 1);
//---
double MaxLoss = NormalizeDouble(-MaxLossPoints * pp,pd);
//---
double Price_Filter = NormalizeDouble(Price_Filter_Close*pp,pd);
double BidPrice = Bid;
//---
//---
if (OrderPrice - BidPrice <= MaxLoss && iClose_Signal - BidPrice <= cf && iWPR_Signal > iWPR_Filter_CloseLong && CheckOrders == 1) result1 = true;
else result1 = false;
//---
if (iOpen_CloseSignal > iClose_CloseSignal && BidPrice - OrderPrice >= Price_Filter && CheckOrders == 1) result2 = true;
else result2 = false;
//---
if (result1 == true || result2 == true) result = true;
else result = false;
//---
return (result);
}
//+--------------------------------------------------------------------------------------------------------------+
//| CloseShortSignal. 谚沩嚯 磬 玎牮桢 觐痤蜿铋 镱玷鲨?
//+--------------------------------------------------------------------------------------------------------------+
bool CloseShortSignal(double OrderPrice, int CheckOrders) {
//+--------------------------------------------------------------------------------------------------------------+
bool result = false;
bool result1 = false;
bool result2 = false;
//---
double iWPR_Signal = iStochastic(NULL, TF_Close,PWPR_Close,1,1, MODE_SMA, 0, MODE_SIGNAL,1);//iWPR(NULL, PERIOD_M15, iWPR_Period, 1);
double iClose_Signal = iClose(NULL,TF_Close , 1);
double iOpen_CloseSignal = iOpen(NULL, PERIOD_M1, 1);
double iClose_CloseSignal = iClose(NULL, PERIOD_M1, 1);
//---
double MaxLoss = NormalizeDouble(-MaxLossPoints*pp,pd);
//---
double Price_Filter = NormalizeDouble(Price_Filter_Close*pp,pd);
double BidPrice = Bid;
double AskPrice = Ask;
//---
//---
if (AskPrice - OrderPrice <= MaxLoss && iClose_Signal - BidPrice >= - cf && iWPR_Signal < iWPR_Filter_CloseShort && CheckOrders == 1) result1 = true;
else result1 = false;
//---
if (iOpen_CloseSignal < iClose_CloseSignal && OrderPrice - AskPrice >= Price_Filter && CheckOrders == 1) result2 = true;
else result2 = false;
//---
if (result1 == true || result2 == true) result = true;
else result = false;
//---
return (result);
}
//+--------------------------------------------------------------------------------------------------------------+
//| CalcLots. 泽黻鲨 疣聍弪?钺爨 腩蜞.
//| 橡?AutoMM > 0.0 && RecoveryMode 趔黻鲨 CalcLots 疣聍栩噱?钺?腩蜞 铗眍耔蝈朦眍 疋钺钿睇?耩邃耱?
//|
//| 亦赕?疣聍弪 腩蜞 镳铊玮钿栩 桉躅? 桤 麒耠?铗牮 ?镳铠腩?铕溴痤? 翌 羼螯 筲咫梓屙桢 腩蜞 蝈镥瘘
//| 玎忤耔?礤 蝾朦觐 铗 疋钺钿睇?耩邃耱? 眍 ?铗 麒耠?铗牮 ?镳铠腩?耦忮蝽桕铎 铕溴痤?
//|
//| 项扈祛 镳铖蝾泐 烫, 趔黻鲨 疣耨麒螓忄弪 腩?桉躅? 桤 镳铊珙澍桴 疣礤?耱铒-腩耨钼 镳?怅膻麇眄铎
//| 镟疣戾蝠?RecoveryMode, 蝾 羼螯, 镳?驽豚龛?祛骓?怅膻麒螯 疱骅?忸耨蜞眍怆屙? 溴镱玷蜞.
//+--------------------------------------------------------------------------------------------------------------+
double CalcLots() {
//+--------------------------------------------------------------------------------------------------------------+
double SumProfit; //--- 洋祆囵睇?镳铘栩
int OldOrdersCount; //--- 义牦?觐?忸 玎牮 耦忮蝽桕铎 铕溴痤?
double loss; //--- 橡铖噤赅
int LossOrdersCount; //--- 阻耠?腩皴??镳铠腩?
double pr; //--- 橡铘栩
int ProfitOrdersCount; //--- 暑?忸 镳栳 铕溴痤??镳铠腩?
double LastPr; //--- 橡邃簌邋 珥圜屙桢 镳铘栩
int LastCount; //--- 橡邃簌邋 珥圜屙桢 聍弪麒赅 铕溴痤?
double MultiLot = 1; //--- 吾眢脲龛?珥圜屙? 箪眍驽龛 腩蜞
//---
//--- 篷腓 烫 怅膻麇? 蝾
if (MultiLotPercent > 0.0 && AutoMM > 0.0) {
//--- 吾眢?屐 珥圜屙?
SumProfit = 0;
OldOrdersCount = 0;
loss = 0;
LossOrdersCount = 0;
pr = 0;
ProfitOrdersCount = 0;
//---
//--- 蔓徼疣屐 玎牮桢 疣礤?铕溴疣
for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
OldOrdersCount++; //--- 痒栩噱?铕溴疣
SumProfit += OrderProfit(); //--- ?耋祆囵睇?镳铘栩
//--- 篷腓 耋祆囵睇?镳铘栩 犷朦 pr (潆 磬鬣豚 犷朦 0)
if (SumProfit > pr) {
//--- 软桷栲腓玷痼屐 镳铘栩 ?聍弪麒?镳栳 铕溴痤?
pr = SumProfit;
ProfitOrdersCount = OldOrdersCount;
}
//--- 篷腓 耋祆囵睇?镳铘栩 戾睃 loss (潆 磬鬣豚 犷朦 0)
if (SumProfit < loss) {
//--- 软桷栲腓玷痼屐 镳铖噤牦 ?聍弪麒?筢铟睇?铕溴痤?
loss = SumProfit;
LossOrdersCount = OldOrdersCount;
}
//--- 篷腓 蝈牦?觐?忸 镱漶麒蜞眄 铕溴痤?犷朦 桦?疣忭?MaxAnalizCount (50), 蝾 ?狍潴?聍栩噱?蝾朦觐 疋彐屙桢 铕溴疣 ?耱囵 恹麒蜞屐.
if (OldOrdersCount >= MaxAnalizCount) break;
}
}
} //--- 青牮桢 for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) {
//--- 篷腓 麒耠?镳栳 铕溴痤?戾睃 桦?疣忭?麒耠?腩皴? 蝾 疣聍栩噱?珥圜屙桢 箪眍驽龛 腩蜞 MultiLot
if (ProfitOrdersCount <= LossOrdersCount) MultiLot = MathPow(MultiLotPercent, LossOrdersCount);
//--- 篷腓 礤? 蝾
else {
//--- 软桷栲腓玷痼屐 镟疣戾蝠?镱 镳铘栩?
SumProfit = pr;
OldOrdersCount = ProfitOrdersCount;
LastPr = pr;
LastCount = ProfitOrdersCount;
//--- 蔓徼疣屐 玎牮桢 疣礤?铕溴疣 (扈眢?麒耠?镳栳 铕溴痤?
for (i = OrdersHistoryTotal() - ProfitOrdersCount - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
//--- 篷腓 恹狃囗?犷脲?50 铕溴痤?镳尻疣琦噱?恹徼疣螯
if (OldOrdersCount >= MaxAnalizCount) break;
//---
OldOrdersCount++; //--- 痒栩噱?觐?忸 铕溴痤?
SumProfit += OrderProfit(); //--- ?镳铘栩
//--- 篷腓 眍恹?镳铘栩 戾睃 镳邃簌邈?(LastPr), 蝾
if (SumProfit < LastPr) {
//--- 襄疱桧桷栲腓玷痼屐 珥圜屙? 镳铘栩??觐?忸 铕溴痤?
LastPr = SumProfit;
LastCount = OldOrdersCount;
}
}
}
} //--- 青牮桢 for (i = OrdersHistoryTotal() - ProfitOrdersCount - 1; i >= 0; i--) {
//--- 篷腓 珥圜屙桢 聍弪麒赅 LastCount 疣忭?聍弪麒牦 镳栳 铕溴痤?桦?镳铠臌?镳铘栩 疣忮?蝈犍屐? 蝾
if (LastCount == ProfitOrdersCount || LastPr == pr) MultiLot = MathPow(MultiLotPercent, LossOrdersCount); //--- 疣聍栩噱?珥圜屙桢 箪眍驽龛 腩蜞 MultiLot
//--- 篷腓 礤? 蝾
else {
//--- 腻腓?镱腩骅蝈朦睇?(loss - pr) 磬 镱腩骅蝈朦睇?(LastPr - pr) ?耩噔龛忄屐 ?痂耜铎, 镱耠?疣聍栩噱?箪眍驽龛?腩蜞 MultiLot
if (MathAbs(loss - pr) / MathAbs(LastPr - pr) >= (Risk + 100.0) / 100.0) MultiLot = MathPow(MultiLotPercent, LossOrdersCount);
else MultiLot = MathPow(MultiLotPercent, LastCount);
}
}
} //--- 青牮桢 if (MultiLotPercent > 0.0 && AutoMM > 0.0) {
//--- 项塍鬣屐 翳磬朦睇?钺?腩蜞, 桉躅? 桤 恹镱腠屙睇?恹 溴轳蜮栝
for (double OpLot = MathMax(MinLot, MathMin(MaxLot, MathCeil(MathMin(AutoMM_Max, MultiLot * AutoMM) / 100.0 * AccountFreeMargin() / LotStep / (LotValue / 100)) * LotStep)); OpLot >= 2.0 * MinLot &&
1.05 * (OpLot * FreeMargin) >= AccountFreeMargin(); OpLot -= MinLot) {
}
return (OpLot);
}
//+--------------------------------------------------------------------------------------------------------------+
//| MaxSpreadFilter. 泽黻鲨 潆 疣聍弪?疣珈屦?耧疱溧 ?耩噔礤龛 邈?耦 珥圜屙桢?MaxSpread.
//| 篷腓 蝈牦?耧疱?镳邂屙, 蝾 忸玮疣屐 TRUE.
//+--------------------------------------------------------------------------------------------------------------+
bool MaxSpreadFilter() {
//+--------------------------------------------------------------------------------------------------------------+
RefreshRates();
if (NormalizeDouble(Ask - Bid, Digits) > NDMaxSpread) return (TRUE);
//---
else return (FALSE);
}
//+--------------------------------------------------------------------------------------------------------------+
//| ExistPosition. 泽黻鲨 镳钼屦觇 铗牮 铕溴痤?
//| 篷腓 铗牮 铕溴?忸玮疣弪 True, 羼腓 礤? 溧弪 疣琊屮屙桢 (False, 0) 磬 铗牮桢.
//+--------------------------------------------------------------------------------------------------------------+
int ExistPosition() {
//+--------------------------------------------------------------------------------------------------------------+
int trade = OrdersTotal() - 1;
for (int i = trade; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderType() == OP_BUY||OrderType() == OP_SELL)&&(OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1)) {
if (OrderSymbol() == EASymbol)
if (OrderType() <= OP_SELL) return (1);
}
}
}
//---
return (0);
}
//+--------------------------------------------------------------------------------------------------------------+
//| OpenTradeCount. 痒弪麒?铗牮 铕溴痤? 篷腓 麒耠?铗牮 铕溴痤?犷朦 桦?疣忭?MaximumTrades, 蝾
//| 桎弪 玎镳弪 磬 蝾疸钼膻.
//+--------------------------------------------------------------------------------------------------------------+
bool OpenTradeCount() {
//+--------------------------------------------------------------------------------------------------------------+
int count = 0;
int trade = OrdersTotal() - 1;
for (int i = trade; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderComment()!= "R"&&((OrderType() == OP_BUY||OrderType() == OP_SELL)&&(OrderMagicNumber() == MagicNumber||OrderMagicNumber() == MagicNumber1)&& OrderSymbol() == EASymbol)) count++;
}
//---
if (count >= MaximumTrades) return (False);
else return (True);
}
/////////////////////////////////////////////////////////
//+--------------------------------------------------------------------------------------------------------------+
//| Dmarket 趔黻鲨 铗牮? 漕镱腠栩咫 瘥眍黜 铕溴痤?
//+--------------------------------------------------------------------------------------------------------------+
void Dmarket(int PA) {
int bm=0,sm=0,bmd=0,smd=0,bms=0,sms=0,LBD=0,LSD=0,NB=0,NS=0,Z=0,MB=0,MS=0,zb=0,zs=0,ZP=0,ZZ=0,CountDop=0;
double PRB,PRS,drb,drs,L,LOT,LOTD,LS,LL,LD,LOTS;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) || OrderSymbol() != Symbol())
continue;
if (OrderMagicNumber()==MagicNumber||OrderMagicNumber()==MagicNumber1&&
BalansMargin*AccountMargin()>AccountFreeMargin()&&BalansMargin>0){Z=1;ZP=1;}
if(OrderMagicNumber()==MagicNumber1)//darfs
CountDop++;
if(CountDop >= MaxDop&&MaxDop>0) {Z=1;ZP=1;} //darfs
if (OrderType()==OP_BUY||OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1||OrderMagicNumber()==MagicNumber
&&OrderOpenTime()>=iTime(Symbol(),AccountBar,0))Z=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1||OrderMagicNumber()==MagicNumber&&Ask>OrderOpenPrice()-OrderDOP*Point*K)zb=1;
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1||OrderMagicNumber()==MagicNumber&&Bid<OrderOpenPrice()+OrderDOP*Point*K)zs=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1){MB=1;PRB=OrderOpenPrice();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1){MS=1;PRS=OrderOpenPrice();}
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber){NB=1;drb=OrderOpenPrice();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber){NS=1;drs=OrderOpenPrice();}
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber&&OrderStopLoss()>OrderOpenPrice())LBD=1;
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber&&OrderStopLoss()<OrderOpenPrice())LSD=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber&&Ask<OrderOpenPrice()-OrderDOP*Point*K){bmd=1;LOTD=OrderLots();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber&&Bid>OrderOpenPrice()+OrderDOP*Point*K){smd=1;LOTD=OrderLots();}
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber&&Ask<OrderOpenPrice()-DOPS*Point*K){bms=1;LOTS=OrderLots();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber&&Bid>OrderOpenPrice()+DOPS*Point*K){sms=1;LOTS=OrderLots();}
if (AccountOrder == FALSE){
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1)NB=1;
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1)NS=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1&&OrderStopLoss()>OrderOpenPrice())LBD=1;
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1&&OrderStopLoss()<OrderOpenPrice())LSD=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1&&Ask<OrderOpenPrice()-OrderDOP*Point*K){bmd=1;LOTD=OrderLots();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1&&Bid>OrderOpenPrice()+OrderDOP*Point*K){smd=1;LOTD=OrderLots();}
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1&&Ask<OrderOpenPrice()-DOPS*Point*K){bms=1;LOTS=OrderLots();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1&&Bid>OrderOpenPrice()+DOPS*Point*K){sms=1;LOTS=OrderLots();}
}
if (ModifDOP == TRUE&&MB==1&&OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber&&OrderTakeProfit()>OrderOpenPrice()+1*Point+Commis*Point*K&&PRB<OrderOpenPrice()&&OrderProfit()<0)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+Commis*Point*K,0,CLR_NONE);
if (ModifDOP == TRUE&&MS==1&&OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber&&OrderTakeProfit()<OrderOpenPrice()-1*Point-Commis*Point*K&&PRS>OrderOpenPrice()&&OrderProfit()<0)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-Commis*Point*K,0,CLR_NONE);
}
if (StartLot>0){LOT=LotSize;LOTD=LotSize;LOTS=LotSize;}
for (int y = OrdersTotal() - 1; y >= 0; y--)
{
if (OrderSelect(y, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()&&(OrderMagicNumber()==MagicNumber1||OrderMagicNumber()==MagicNumber))
{
if (RiskMargin>0&&RiskMargin*AccountFreeMargin()<AccountMargin())ZP=1;
}
}
//...........................DOP................................................
double ML;
int m;
double MG=AccountFreeMargin()*RiskFreeMargin;
double Min = MarketInfo(Symbol(), MODE_LOTSTEP);
m=MG/MarketInfo (Symbol(), MODE_MARGINREQUIRED)/Min;
ML = m*Min;
if(ML>MaxLot)ML= MaxLot;
if(ML< MarketInfo(Symbol(), MODE_MINLOT))Z=1;
if(Z==0&&ZP==0)
{
if(PA==0&&bmd==1&&zb==0&&OpenLongSignal()==true
)
{
LD=NormalizeDouble(KDOP*LOTD,NormalizeLot);
if(LD>MaxLot)LD=MaxLot;
if(LD>ML)LD=ML;
OrderSend(Symbol(),0,LD,Ask,2,0,0,NULL,MagicNumber1,0,Blue);
}
if(PA==0&&smd==1&&zs==0&&OpenShortSignal()==true
)
{
LD=NormalizeDouble(KDOP*LOTD,NormalizeLot);
if(LD>MaxLot)LD=MaxLot;
if(LD>ML)LD=ML;
OrderSend(Symbol(),1,LD,Bid,2,0,0,NULL,MagicNumber1,0,Magenta);
}
}
return;
}
//+--------------------------------------------------------------------------------------------------------------+
//| Dlimit 趔黻鲨 铗牮? 漕镱腠栩咫 腓扈蝽 铕溴痤?
//+--------------------------------------------------------------------------------------------------------------+
void Dlimit(int PA) {
int bm=0,sm=0,bmd=0,smd=0,bms=0,sms=0,LBD=0,LSD=0,NB=0,NS=0,Z=0,MB=0,MS=0,zb=0,zs=0,BL=0,SL=0,ZP=0,CountDop=0;
double PRB,PRS,drb,drs,L,LOT,LOTD,LS,LL,LD,LOTS;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) || OrderSymbol() != Symbol())
continue;
if (OrderMagicNumber()==MagicNumber||OrderMagicNumber()==MagicNumber1&&
BalansMargin*AccountMargin()>AccountFreeMargin()&&BalansMargin>0)Z=1;
if(OrderMagicNumber()==MagicNumber1)//darfs
CountDop++;
if(CountDop >= MaxDop&&MaxDop>0) ZP=1; //darfs
if (DeleteLimitU == TRUE&&OrderType()==OP_BUYLIMIT&&OrderMagicNumber()==MagicNumber1&&OpenLongSignal()!=true)OrderDelete(OrderTicket());
if (DeleteLimitU == TRUE&&OrderType()==OP_SELLLIMIT&&OrderMagicNumber()==MagicNumber1&&OpenShortSignal()!=true)OrderDelete(OrderTicket());
if (OrderType()==OP_BUYLIMIT&&OrderMagicNumber()==MagicNumber1)BL=1;
if (OrderType()==OP_SELLLIMIT&&OrderMagicNumber()==MagicNumber1)SL=1;
if (OrderType()==OP_BUY||OrderType()==OP_SELL&&OrderOpenTime()>=iTime(Symbol(),AccountBar,0))Z=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1||OrderMagicNumber()==MagicNumber&&Ask>OrderOpenPrice()-OrderDOP*Point*K)zb=1;
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1||OrderMagicNumber()==MagicNumber&&Bid<OrderOpenPrice()+OrderDOP*Point*K)zs=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1){MB=1;PRB=OrderOpenPrice();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1){MS=1;PRS=OrderOpenPrice();}
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber){NB=1;drb=OrderOpenPrice();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber){NS=1;drs=OrderOpenPrice();}
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber&&OrderStopLoss()>OrderOpenPrice())LBD=1;
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber&&OrderStopLoss()<OrderOpenPrice())LSD=1;
if (DeleteLimit == TRUE&&OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber&&OrderStopLoss()<OrderOpenPrice()){bm=1;LOT=OrderLots();}
if (DeleteLimit == TRUE&&OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber&&OrderStopLoss()>OrderOpenPrice()){sm=1;LOT=OrderLots();}
if (DeleteLimit == FALSE&&OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber){bm=1;LOT=OrderLots();}
if (DeleteLimit == FALSE&&OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber){sm=1;LOT=OrderLots();}
if (AccountOrder == FALSE){
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1)NB=1;
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1)NS=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1&&OrderStopLoss()>OrderOpenPrice())LBD=1;
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1&&OrderStopLoss()<OrderOpenPrice())LSD=1;
if (DeleteLimit == TRUE&&OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1&&OrderStopLoss()<OrderOpenPrice()){bm=1;LOT=OrderLots();}
if (DeleteLimit == TRUE&&OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1&&OrderStopLoss()>OrderOpenPrice()){sm=1;LOT=OrderLots();}
if (DeleteLimit == FALSE&&OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1){bm=1;LOT=OrderLots();}
if (DeleteLimit == FALSE&&OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1){sm=1;LOT=OrderLots();}
}
if(DeleteLimit == TRUE&&OrderType()==OP_BUYLIMIT&&LBD==1||NB==0)OrderDelete(OrderTicket());
if(DeleteLimit == TRUE&&OrderType()==OP_SELLLIMIT&&LSD==1||NS==0)OrderDelete(OrderTicket());
if(OrderType()==OP_BUYLIMIT&&TimeCurrent()-OrderOpenTime()>TimeL*60)OrderDelete(OrderTicket());
if(OrderType()==OP_SELLLIMIT&&TimeCurrent()-OrderOpenTime()>TimeL*60)OrderDelete(OrderTicket());
}
for (int y = OrdersTotal() - 1; y >= 0; y--)
{
if (OrderSelect(y, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()&&(OrderMagicNumber()==MagicNumber1||OrderMagicNumber()==MagicNumber))
{
if (RiskMargin>0&&RiskMargin*AccountFreeMargin()<AccountMargin())ZP=1;
}
}
double ML;
int m;
double MG=AccountFreeMargin()*RiskFreeMargin;
double Min = MarketInfo(Symbol(), MODE_LOTSTEP);
m=MG/MarketInfo (Symbol(), MODE_MARGINREQUIRED)/Min;
ML = m*Min;
if(ML>MaxLot)ML= MaxLot;
//...........................LIMIT................................................
if(PA==0&&bm==1&&BL==0&&OpenLongSignal()==true&&ZP==0
)
{
LL=NormalizeDouble(KLimit*LOT,NormalizeLot);
if(LL>MaxLot)LL=MaxLot;
if(LL>ML)LL=ML;
OrderSend(Symbol(),2,LL,Bid - LimitOrder*Point*K ,2,0,0,NULL,MagicNumber1,TimeCurrent()+TimeL*60,Lime);
}
if(PA==0&&sm==1&&SL==0&&OpenShortSignal()==true&&ZP==0
)
{
LL=NormalizeDouble(KLimit*LOT,NormalizeLot);
if(LL>MaxLot)LL=MaxLot;
if(LL>ML)LL=ML;
OrderSend(Symbol(),3,LL,Ask + LimitOrder*Point*K ,2,0,0,NULL,MagicNumber1,TimeCurrent()+TimeL*60,Orange);
}
return;
}
//+--------------------------------------------------------------------------------------------------------------+
//| Dstop 趔黻鲨 铗牮? 漕镱腠栩咫 耱铒钼 铕溴痤?
//+--------------------------------------------------------------------------------------------------------------+
void Dstop(int PA) {
int bm=0,sm=0,bmd=0,smd=0,bms=0,sms=0,LBD=0,LSD=0,NB=0,NS=0,Z=0,MB=0,MS=0,zb=0,zs=0,BS=0,SS=0,ZP=0,CountDop=0;
double PRB,PRS,drb,drs,L,LOT,LOTD,LS,LL,LD,LOTS;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) || OrderSymbol() != Symbol())
continue;
if (OrderMagicNumber()==MagicNumber||OrderMagicNumber()==MagicNumber1&&
BalansMargin*AccountMargin()>AccountFreeMargin()&&BalansMargin>0)Z=1;
if(OrderMagicNumber()==MagicNumber1)//darfs
CountDop++;
if(CountDop >= MaxDop&&MaxDop>0) ZP=1; //darfs
if (OrderType()==OP_BUYSTOP)BS=1;
if (OrderType()==OP_SELLSTOP)SS=1;
if (OrderType()==OP_BUY||OrderType()==OP_SELL&&OrderOpenTime()>=iTime(Symbol(),AccountBar,0))Z=1;
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber&&Ask<OrderOpenPrice()-DOPS*Point*K){bms=1;LOTS=OrderLots();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber&&Bid>OrderOpenPrice()+DOPS*Point*K){sms=1;LOTS=OrderLots();}
if (AccountOrder == FALSE){
if (OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1&&Ask<OrderOpenPrice()-DOPS*Point*K){bms=1;LOTS=OrderLots();}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1&&Bid>OrderOpenPrice()+DOPS*Point*K){sms=1;LOTS=OrderLots();}
}
if(OrderType()==OP_BUYSTOP&&TimeCurrent()-OrderOpenTime()>TimeS*60)OrderDelete(OrderTicket());
if(OrderType()==OP_SELLSTOP&&TimeCurrent()-OrderOpenTime()>TimeS*60)OrderDelete(OrderTicket());
if(ModifStop == TRUE&&OrderType()==OP_BUYSTOP&&OrderOpenPrice()-Ask>StopOrder*Point*K)OrderModify(OrderTicket(),Ask+StopOrder*Point*K,0,0,OrderExpiration(),CLR_NONE);
if(ModifStop == TRUE&&OrderType()==OP_SELLSTOP&&Bid-OrderOpenPrice()>StopOrder*Point*K)OrderModify(OrderTicket(),Bid-StopOrder*Point*K,0,0,OrderExpiration(),CLR_NONE);
}
if (StartLot>0){LOT=LotSize;LOTD=LotSize;LOTS=LotSize;}
for (int y = OrdersTotal() - 1; y >= 0; y--)
{
if (OrderSelect(y, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()&&(OrderMagicNumber()==MagicNumber1||OrderMagicNumber()==MagicNumber))
{
if (RiskMargin>0&&RiskMargin*AccountFreeMargin()<AccountMargin())ZP=1;
}
}
double ML;
int m;
double MG=AccountFreeMargin()*RiskFreeMargin;
double Min = MarketInfo(Symbol(), MODE_LOTSTEP);
m=MG/MarketInfo (Symbol(), MODE_MARGINREQUIRED)/Min;
ML = m*Min;
if(ML>MaxLot)ML= MaxLot;
//...........................STOP................................................
if(PA==0&&bms==1&&BS==0&&OpenLongSignal()==true&&ZP==0
)
{
LS=NormalizeDouble(KStop*LOTS,NormalizeLot);
if(LS>MaxLot)LS=MaxLot;
if(LS>ML)LS=ML;
OrderSend(Symbol(),4,LS,Ask + StopOrder*Point*K ,2,0,0,NULL,MagicNumber1,TimeCurrent()+TimeS*60,Aqua);
}
if(PA==0&&sms==1&&SS==0&&OpenShortSignal()==true&&ZP==0
)
{
LS=NormalizeDouble(KStop*LOTS,NormalizeLot);
if(LS>MaxLot)LS=MaxLot;
if(LS>ML)LS=ML;
OrderSend(Symbol(),5,LS,Bid - StopOrder*Point*K ,2,0,0,NULL,MagicNumber1,TimeCurrent()+TimeS*60,Yellow);
}
return;
}
//+--------------------------------------------------------------------------------------------------------------+
//| Grafik.
//+--------------------------------------------------------------------------------------------------------------+
void Grafik()
{
int b=0,s=0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)&& OrderSymbol() == Symbol())
{
if (OrderMagicNumber()==MagicNumber)
{
if (OrderType()==OP_BUY)b=1;//else b=0;
if (OrderType()==OP_SELL)s=1;//else s=0;
if (OrderType()==OP_BUY)
{
if(ObjectFind("NP")==-1)
{
ObjectCreate("NP",OBJ_HLINE,0,0,OrderOpenPrice());
ObjectSet("NP",OBJPROP_COLOR,LC);
}
}
if (OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber)
{
if(ObjectFind("NP1")==-1)
{
ObjectCreate("NP1",OBJ_HLINE,0,0,OrderOpenPrice());
ObjectSet("NP1",OBJPROP_COLOR,LC1);
}
}
}
double P= ObjectGet( "NP", OBJPROP_PRICE1);
double p = NormalizeDouble(P,Digits);
double P1= ObjectGet( "NP1", OBJPROP_PRICE1);
double p1 = NormalizeDouble(P1,Digits);
if (ModifTake == FALSE&&ModifDOP == TRUE&&ObjectFind("NP")!=-1&&b==1&&OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1&&OrderTakeProfit()<p-Point)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),p,0,CLR_NONE);
if (ModifTake == FALSE&&ModifDOP == TRUE&&ObjectFind("NP1")!=-1&&s==1&&OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1&&OrderTakeProfit()>p1+Point)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),p1,0,CLR_NONE);
//.....................................................................................................................
if (ModifTake == TRUE&&ObjectFind("NP")!=-1&&b==1&&OrderType()==OP_BUY&&OrderMagicNumber()==MagicNumber1&&OrderOpenPrice()<p-(Ask-Bid))
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),p,0,CLR_NONE);
if (ModifTake == TRUE&&ObjectFind("NP1")!=-1&&s==1&&OrderType()==OP_SELL&&OrderMagicNumber()==MagicNumber1&&OrderOpenPrice()>p1+(Ask-Bid))
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),p1,0,CLR_NONE);
//.....................................................................................................................
}
}
if (b==0)ObjectDelete("NP");
if (s==0)ObjectDelete("NP1");
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/hangyejiadao_581/mql4.git
git@gitee.com:hangyejiadao_581/mql4.git
hangyejiadao_581
mql4
mql4
master

搜索帮助