EA运行一段时间后 包括测试 满足平仓条件也不平仓 | |
---|---|
![]() |
carey 2012-08-08 10:55
EA跑一段时间后 刚开始的平仓都是按平仓条件执行,但运行一段时间后 单子达到平仓条件也不平不知道是为什么?
|
![]() |
myeatrade 2012-08-18 02:28
如果刚开始的平仓可以被有效执行,据我们测试目前还没有发现你这样的问题,我们将继续观察留意这个问题。
如果可以将你生成的代码发给我们,将有助于我们发现问题! |
![]() |
runweihu 2012-11-28 16:04
我也有这个问题,运行几单后就不平仓了。
|
![]() |
runweihu 2012-11-28 16:10
//+------------------------------------------------------------------+
// Copyright , myEAtrade // http://www.myEAtrade.com // System Name: 测试1 // Automatically generated by the myEAtrade.com // at Wednesday 28th of November 2012 07:33:32 AM //+------------------------------------------------------------------+ #property copyright \"myEAtrade , www.myeatrade.com\" #property link \"http://www.myeatrade.com/\" ///////////////////////////Model1//////////////////////////// extern string Model1_tip=\"多开\"; bool Model1_AutoTrade=1; extern int Model1_CalculateModel=2; extern int Model1_CalculateModelTimeframe=60; extern double Model1_DefaultLots=1; extern bool Model1_MoneyManagement=0; extern double Model1_Risk=2; extern int Model1_LotDigits=1; extern double Model1_MinLots=0.1; extern double Model1_MaxLots=1000; extern int Model1_StopLoss=0; extern int Model1_TakeProfit=0; extern int Model1_BreakEven=0; extern int Model1_TrailMode=0; extern int Model1_TrailStart=50; extern int Model1_TrailStop=20; extern int Model1_MaxSpread=3; extern int Model1_Slippage=10; extern bool Model1_ECN=1; extern bool Model1_MultiOrder=0; extern int Model1_MaxOrder=5; extern int Model1_MultiOrderTimeInterval=5; extern bool Model1_InstantOrder=1; extern bool Model1_StopOrder=0; extern bool Model1_LimitOrder=0; extern int Model1_PendingGap=20; extern int Model1_PendingExpiration=720; extern int Model1_HardCloseTime=0; extern bool Model1_ReverseOrder=0; string M5460_Symbol;double M5460_Point;int M5460_Mt;datetime Model1_lastOpenOrderTime; extern string M1G1_tip=\"Condition Group1\"; extern string M1G1_FilterOpt12_tip=\"Filter Conditions\"; extern string M1G1_FilterOpt34_tip=\"Filter Conditions\"; extern string M1G1_Exe_tip=\"Execution Conditions\"; extern string M1G1_ExeCon1_tip=\"Execution Condition 1\"; string m1g1c1_Exec_Opt12_APara1=\"NULL\"; // Symbol extern double m1g1c1_Exec_Opt12_APara2=60; // Timeframe extern double m1g1c1_Exec_Opt12_APara3=0; // MA method extern double m1g1c1_Exec_Opt12_APara4=20; // Period extern double m1g1c1_Exec_Opt12_APara5=0; // Apply to extern double m1g1c1_Exec_Opt12_APara6=0; // Shift string m1g1c1_Exec_Opt12_BPara1=\"NULL\"; // Symbol extern double m1g1c1_Exec_Opt12_BPara2=60; // Timeframe extern double m1g1c1_Exec_Opt12_BPara3=0; // MA method extern double m1g1c1_Exec_Opt12_BPara4=20; // Period extern double m1g1c1_Exec_Opt12_BPara5=0; // Apply to extern double m1g1c1_Exec_Opt12_BPara6=1; // Shift extern string M1G1_ExeCon2_tip=\"Execution Condition 2\"; string m1g1c2_Exec_Opt12_APara1=\"NULL\"; // Symbol extern double m1g1c2_Exec_Opt12_APara2=60; // Timeframe extern double m1g1c2_Exec_Opt12_APara3=0; // MA method extern double m1g1c2_Exec_Opt12_APara4=20; // Period extern double m1g1c2_Exec_Opt12_APara5=0; // Apply to extern double m1g1c2_Exec_Opt12_APara6=1; // Shift string m1g1c2_Exec_Opt12_BPara1=\"NULL\"; // Symbol extern double m1g1c2_Exec_Opt12_BPara2=60; // Timeframe extern double m1g1c2_Exec_Opt12_BPara3=0; // MA method extern double m1g1c2_Exec_Opt12_BPara4=20; // Period extern double m1g1c2_Exec_Opt12_BPara5=0; // Apply to extern double m1g1c2_Exec_Opt12_BPara6=2; // Shift ///////////////////////////Model2//////////////////////////// extern string Model2_tip=\"空开\"; bool Model2_AutoTrade=1; extern int Model2_CalculateModel=2; extern int Model2_CalculateModelTimeframe=60; extern double Model2_DefaultLots=1; extern bool Model2_MoneyManagement=0; extern double Model2_Risk=2; extern int Model2_LotDigits=1; extern double Model2_MinLots=0.1; extern double Model2_MaxLots=1000; extern int Model2_StopLoss=0; extern int Model2_TakeProfit=0; extern int Model2_BreakEven=0; extern int Model2_TrailMode=0; extern int Model2_TrailStart=50; extern int Model2_TrailStop=20; extern int Model2_MaxSpread=3; extern int Model2_Slippage=10; extern bool Model2_ECN=1; extern bool Model2_MultiOrder=0; extern int Model2_MaxOrder=5; extern int Model2_MultiOrderTimeInterval=5; extern bool Model2_InstantOrder=1; extern bool Model2_StopOrder=0; extern bool Model2_LimitOrder=0; extern int Model2_PendingGap=20; extern int Model2_PendingExpiration=720; extern int Model2_HardCloseTime=0; extern bool Model2_ReverseOrder=0; string M5505_Symbol;double M5505_Point;int M5505_Mt;datetime Model2_lastOpenOrderTime; extern string M2G1_tip=\"Condition Group1\"; extern string M2G1_FilterOpt12_tip=\"Filter Conditions\"; extern string M2G1_FilterOpt34_tip=\"Filter Conditions\"; extern string M2G1_Exe_tip=\"Execution Conditions\"; extern string M2G1_ExeCon1_tip=\"Execution Condition 1\"; string m2g1c1_Exec_Opt12_APara1=\"NULL\"; // Symbol extern double m2g1c1_Exec_Opt12_APara2=60; // Timeframe extern double m2g1c1_Exec_Opt12_APara3=0; // MA method extern double m2g1c1_Exec_Opt12_APara4=20; // Period extern double m2g1c1_Exec_Opt12_APara5=0; // Apply to extern double m2g1c1_Exec_Opt12_APara6=0; // Shift string m2g1c1_Exec_Opt12_BPara1=\"NULL\"; // Symbol extern double m2g1c1_Exec_Opt12_BPara2=60; // Timeframe extern double m2g1c1_Exec_Opt12_BPara3=0; // MA method extern double m2g1c1_Exec_Opt12_BPara4=20; // Period extern double m2g1c1_Exec_Opt12_BPara5=0; // Apply to extern double m2g1c1_Exec_Opt12_BPara6=1; // Shift extern string M2G1_ExeCon2_tip=\"Execution Condition 2\"; string m2g1c2_Exec_Opt12_APara1=\"NULL\"; // Symbol extern double m2g1c2_Exec_Opt12_APara2=60; // Timeframe extern double m2g1c2_Exec_Opt12_APara3=0; // MA method extern double m2g1c2_Exec_Opt12_APara4=20; // Period extern double m2g1c2_Exec_Opt12_APara5=0; // Apply to extern double m2g1c2_Exec_Opt12_APara6=1; // Shift string m2g1c2_Exec_Opt12_BPara1=\"NULL\"; // Symbol extern double m2g1c2_Exec_Opt12_BPara2=60; // Timeframe extern double m2g1c2_Exec_Opt12_BPara3=0; // MA method extern double m2g1c2_Exec_Opt12_BPara4=20; // Period extern double m2g1c2_Exec_Opt12_BPara5=0; // Apply to extern double m2g1c2_Exec_Opt12_BPara6=2; // Shift ///////////////////////////Model3//////////////////////////// extern string Model3_tip=\"多平\"; bool Model3_AutoTrade=1; extern int Model3_CalculateModel=2; extern int Model3_CalculateModelTimeframe=60; extern double Model3_DefaultLots=1; extern bool Model3_MoneyManagement=0; extern double Model3_Risk=2; extern int Model3_LotDigits=1; extern double Model3_MinLots=0.1; extern double Model3_MaxLots=1000; extern int Model3_StopLoss=0; extern int Model3_TakeProfit=0; extern int Model3_BreakEven=0; extern int Model3_TrailMode=0; extern int Model3_TrailStart=50; extern int Model3_TrailStop=20; extern int Model3_MaxSpread=3; extern int Model3_Slippage=10; extern bool Model3_ECN=1; extern bool Model3_MultiOrder=0; extern int Model3_MaxOrder=5; extern int Model3_MultiOrderTimeInterval=5; extern bool Model3_InstantOrder=1; extern bool Model3_StopOrder=0; extern bool Model3_LimitOrder=0; extern int Model3_PendingGap=20; extern int Model3_PendingExpiration=720; extern int Model3_HardCloseTime=0; extern bool Model3_ReverseOrder=0; string M5504_Symbol;double M5504_Point;int M5504_Mt;datetime Model3_lastOpenOrderTime; extern string M3G1_tip=\"Condition Group1\"; extern string M3G1_FilterOpt12_tip=\"Filter Conditions\"; extern string M3G1_FilterOpt34_tip=\"Filter Conditions\"; extern string M3G1_Exe_tip=\"Execution Conditions\"; extern string M3G1_ExeCon1_tip=\"Execution Condition 1\"; string m3g1c1_Exec_Opt12_APara1=\"NULL\"; // Symbol extern double m3g1c1_Exec_Opt12_APara2=60; // Timeframe extern double m3g1c1_Exec_Opt12_APara3=0; // MA method extern double m3g1c1_Exec_Opt12_APara4=20; // Period extern double m3g1c1_Exec_Opt12_APara5=0; // Apply to extern double m3g1c1_Exec_Opt12_APara6=0; // Shift string m3g1c1_Exec_Opt12_BPara1=\"NULL\"; // Symbol extern double m3g1c1_Exec_Opt12_BPara2=60; // Timeframe extern double m3g1c1_Exec_Opt12_BPara3=0; // MA method extern double m3g1c1_Exec_Opt12_BPara4=20; // Period extern double m3g1c1_Exec_Opt12_BPara5=0; // Apply to extern double m3g1c1_Exec_Opt12_BPara6=1; // Shift ///////////////////////////Model4//////////////////////////// extern string Model4_tip=\"空平\"; bool Model4_AutoTrade=1; extern int Model4_CalculateModel=2; extern int Model4_CalculateModelTimeframe=60; extern double Model4_DefaultLots=1; extern bool Model4_MoneyManagement=0; extern double Model4_Risk=2; extern int Model4_LotDigits=1; extern double Model4_MinLots=0.1; extern double Model4_MaxLots=1000; extern int Model4_StopLoss=0; extern int Model4_TakeProfit=0; extern int Model4_BreakEven=0; extern int Model4_TrailMode=0; extern int Model4_TrailStart=50; extern int Model4_TrailStop=20; extern int Model4_MaxSpread=3; extern int Model4_Slippage=10; extern bool Model4_ECN=1; extern bool Model4_MultiOrder=0; extern int Model4_MaxOrder=5; extern int Model4_MultiOrderTimeInterval=5; extern bool Model4_InstantOrder=1; extern bool Model4_StopOrder=0; extern bool Model4_LimitOrder=0; extern int Model4_PendingGap=20; extern int Model4_PendingExpiration=720; extern int Model4_HardCloseTime=0; extern bool Model4_ReverseOrder=0; string M5506_Symbol;double M5506_Point;int M5506_Mt;datetime Model4_lastOpenOrderTime; extern string M4G1_tip=\"Condition Group1\"; extern string M4G1_FilterOpt12_tip=\"Filter Conditions\"; extern string M4G1_FilterOpt34_tip=\"Filter Conditions\"; extern string M4G1_Exe_tip=\"Execution Conditions\"; extern string M4G1_ExeCon1_tip=\"Execution Condition 1\"; string m4g1c1_Exec_Opt12_APara1=\"NULL\"; // Symbol extern double m4g1c1_Exec_Opt12_APara2=60; // Timeframe extern double m4g1c1_Exec_Opt12_APara3=0; // MA method extern double m4g1c1_Exec_Opt12_APara4=20; // Period extern double m4g1c1_Exec_Opt12_APara5=0; // Apply to extern double m4g1c1_Exec_Opt12_APara6=0; // Shift string m4g1c1_Exec_Opt12_BPara1=\"NULL\"; // Symbol extern double m4g1c1_Exec_Opt12_BPara2=60; // Timeframe extern double m4g1c1_Exec_Opt12_BPara3=0; // MA method extern double m4g1c1_Exec_Opt12_BPara4=20; // Period extern double m4g1c1_Exec_Opt12_BPara5=0; // Apply to extern double m4g1c1_Exec_Opt12_BPara6=1; // Shift double m1g1c1_Exec_Opt12_A_val[3];double m1g1c1_Exec_Opt12_B_val[3];double m1g1c2_Exec_Opt12_A_val[3];double m1g1c2_Exec_Opt12_B_val[3];double m2g1c1_Exec_Opt12_A_val[3];double m2g1c1_Exec_Opt12_B_val[3];double m2g1c2_Exec_Opt12_A_val[3];double m2g1c2_Exec_Opt12_B_val[3];double m3g1c1_Exec_Opt12_A_val[3];double m3g1c1_Exec_Opt12_B_val[3];double m4g1c1_Exec_Opt12_A_val[3];double m4g1c1_Exec_Opt12_B_val[3]; datetime lastBarTime[5]; int modelMagic[5]; bool canClose31=true; bool closeOneTime31=1; bool canClose41=true; bool closeOneTime41=1; int maxtry=10; bool printLog=true; int init(){ M5460_Symbol=Symbol(); double m1_point = MarketInfo(M5460_Symbol,MODE_POINT); int m1_digits = MarketInfo(M5460_Symbol,MODE_DIGITS); if(m1_digits==3 || m1_digits==5){ M5460_Point=m1_point*10; M5460_Mt=10; }else{ M5460_Point=m1_point; M5460_Mt=1; } modelMagic[1]=5460; M5505_Symbol=Symbol(); double m2_point = MarketInfo(M5505_Symbol,MODE_POINT); int m2_digits = MarketInfo(M5505_Symbol,MODE_DIGITS); if(m2_digits==3 || m2_digits==5){ M5505_Point=m2_point*10; M5505_Mt=10; }else{ M5505_Point=m2_point; M5505_Mt=1; } modelMagic[2]=5505; M5504_Symbol=Symbol(); double m3_point = MarketInfo(M5504_Symbol,MODE_POINT); int m3_digits = MarketInfo(M5504_Symbol,MODE_DIGITS); if(m3_digits==3 || m3_digits==5){ M5504_Point=m3_point*10; M5504_Mt=10; }else{ M5504_Point=m3_point; M5504_Mt=1; } modelMagic[3]=5504; M5506_Symbol=Symbol(); double m4_point = MarketInfo(M5506_Symbol,MODE_POINT); int m4_digits = MarketInfo(M5506_Symbol,MODE_DIGITS); if(m4_digits==3 || m4_digits==5){ M5506_Point=m4_point*10; M5506_Mt=10; }else{ M5506_Point=m4_point; M5506_Mt=1; } modelMagic[4]=5506; m1g1c1_Exec_Opt12_APara1=Symbol();m1g1c1_Exec_Opt12_BPara1=Symbol();m1g1c2_Exec_Opt12_APara1=Symbol();m1g1c2_Exec_Opt12_BPara1=Symbol();m2g1c1_Exec_Opt12_APara1=Symbol();m2g1c1_Exec_Opt12_BPara1=Symbol();m2g1c2_Exec_Opt12_APara1=Symbol();m2g1c2_Exec_Opt12_BPara1=Symbol();m3g1c1_Exec_Opt12_APara1=Symbol();m3g1c1_Exec_Opt12_BPara1=Symbol();m4g1c1_Exec_Opt12_APara1=Symbol();m4g1c1_Exec_Opt12_BPara1=Symbol(); } int start(){ runModel1();runModel2();runModel3();runModel4(); return (0); } void runModel1(){ int totalPosition = countPositionByMagicSymbol(5460,M5460_Symbol,Model1_HardCloseTime); if( Model1_MaxSpread>0 && (MarketInfo(M5460_Symbol,MODE_ASK)-MarketInfo(M5460_Symbol,MODE_BID))>Model1_MaxSpread*M5460_Point )return; if((Model1_CalculateModel!=0)&&(!isNewBar(M5460_Symbol,Model1_CalculateModelTimeframe,1))) return; bool canRunCheck=false; if(!Model1_MultiOrder)Model1_MaxOrder=1; if(totalPosition<Model1_MaxOrder)canRunCheck=true; if(Model1_MaxOrder>1&&totalPosition>=1){ if(TimeCurrent()<(Model1_lastOpenOrderTime+Model1_MultiOrderTimeInterval*60))canRunCheck=false; } if(Model1_BreakEven>0&&totalPosition>0)breakEven(5460,M5460_Symbol,Model1_BreakEven,M5460_Point); if(Model1_TrailMode>0&&Model1_TrailMode<=2&&totalPosition>0)trailStop(5460,M5460_Symbol,Model1_TrailMode,Model1_TrailStart,Model1_TrailStop,M5460_Point); if(canRunCheck){ if(checkM1G1()){ int orderType=OP_BUY;if(Model1_ReverseOrder)orderType=OP_SELL; if(Model1_AutoTrade){ double lots = getlots(Model1_DefaultLots,Model1_MoneyManagement,Model1_Risk,Model1_StopLoss,M5460_Symbol,M5460_Mt,Model1_LotDigits,Model1_MinLots,Model1_MaxLots); int sl= Model1_StopLoss; int tp = Model1_TakeProfit; int ticket = openposition( M5460_Symbol, orderType, lots, sl, tp, 5460, Model1_ECN, Model1_InstantOrder, Model1_StopOrder, Model1_LimitOrder, Model1_PendingGap, Model1_PendingExpiration, M5460_Point, M5460_Mt, Model1_Slippage); Model1_lastOpenOrderTime = getOrderOpenTime(ticket);} } } } void runModel2(){ int totalPosition = countPositionByMagicSymbol(5505,M5505_Symbol,Model2_HardCloseTime); if( Model2_MaxSpread>0 && (MarketInfo(M5505_Symbol,MODE_ASK)-MarketInfo(M5505_Symbol,MODE_BID))>Model2_MaxSpread*M5505_Point )return; if((Model2_CalculateModel!=0)&&(!isNewBar(M5505_Symbol,Model2_CalculateModelTimeframe,2))) return; bool canRunCheck=false; if(!Model2_MultiOrder)Model2_MaxOrder=1; if(totalPosition<Model2_MaxOrder)canRunCheck=true; if(Model2_MaxOrder>1&&totalPosition>=1){ if(TimeCurrent()<(Model2_lastOpenOrderTime+Model2_MultiOrderTimeInterval*60))canRunCheck=false; } if(Model2_BreakEven>0&&totalPosition>0)breakEven(5505,M5505_Symbol,Model2_BreakEven,M5505_Point); if(Model2_TrailMode>0&&Model2_TrailMode<=2&&totalPosition>0)trailStop(5505,M5505_Symbol,Model2_TrailMode,Model2_TrailStart,Model2_TrailStop,M5505_Point); if(canRunCheck){ if(checkM2G1()){ int orderType=OP_SELL;if(Model2_ReverseOrder)orderType=OP_BUY; if(Model2_AutoTrade){ double lots = getlots(Model2_DefaultLots,Model2_MoneyManagement,Model2_Risk,Model2_StopLoss,M5505_Symbol,M5505_Mt,Model2_LotDigits,Model2_MinLots,Model2_MaxLots); int sl= Model2_StopLoss; int tp = Model2_TakeProfit; int ticket = openposition( M5505_Symbol, orderType, lots, sl, tp, 5505, Model2_ECN, Model2_InstantOrder, Model2_StopOrder, Model2_LimitOrder, Model2_PendingGap, Model2_PendingExpiration, M5505_Point, M5505_Mt, Model2_Slippage); Model2_lastOpenOrderTime = getOrderOpenTime(ticket);} } } } void runModel3(){ if((Model3_CalculateModel!=0)&&(!isNewBar(M5504_Symbol,Model3_CalculateModelTimeframe,3))) return; bool canRunCheck=false; if(checkHasPosition(5460,M5460_Symbol)){canRunCheck=true;}else{if(closeOneTime31)canClose31=true;} bool spread31=true; if( Model3_MaxSpread>0 && (MarketInfo(M5460_Symbol,MODE_ASK)-MarketInfo(M5460_Symbol,MODE_BID))>Model3_MaxSpread*M5460_Point )spread31=false; if(canRunCheck){ if(checkM3G1()){ bool allClose; if(canClose31&&spread31){ allClose=closeModelPosition(5460,M5460_Symbol,1,0,M5504_Mt,Model3_Slippage); if(closeOneTime31&&allClose)canClose31=false; } } } } void runModel4(){ if((Model4_CalculateModel!=0)&&(!isNewBar(M5506_Symbol,Model4_CalculateModelTimeframe,4))) return; bool canRunCheck=false; if(checkHasPosition(5505,M5505_Symbol)){canRunCheck=true;}else{if(closeOneTime41)canClose41=true;} bool spread41=true; if( Model4_MaxSpread>0 && (MarketInfo(M5505_Symbol,MODE_ASK)-MarketInfo(M5505_Symbol,MODE_BID))>Model4_MaxSpread*M5505_Point )spread41=false; if(canRunCheck){ if(checkM4G1()){ bool allClose; if(canClose41&&spread41){ allClose=closeModelPosition(5505,M5505_Symbol,1,0,M5506_Mt,Model4_Slippage); if(closeOneTime41&&allClose)canClose41=false; } } } } bool checkM1G1(){ int i; bool reValue=false; int preBar=0; if(Model1_CalculateModel==2)preBar=1; bool filter12=true; bool filter34=true; bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false; if(exec12_b){ exec12_temp=true; int e12cBar111=2; if(preBar==1&&e12cBar111==1)e12cBar111=2; for(i=preBar;i<=e12cBar111;i++){ m1g1c1_Exec_Opt12_A_val=iMA(m1g1c1_Exec_Opt12_APara1, m1g1c1_Exec_Opt12_APara2, m1g1c1_Exec_Opt12_APara4, m1g1c1_Exec_Opt12_APara6, m1g1c1_Exec_Opt12_APara3, m1g1c1_Exec_Opt12_APara5, i); m1g1c1_Exec_Opt12_B_val=iMA(m1g1c1_Exec_Opt12_BPara1, m1g1c1_Exec_Opt12_BPara2, m1g1c1_Exec_Opt12_BPara4, m1g1c1_Exec_Opt12_BPara6, m1g1c1_Exec_Opt12_BPara3, m1g1c1_Exec_Opt12_BPara5, i); } if(!(m1g1c1_Exec_Opt12_A_val[preBar]>(m1g1c1_Exec_Opt12_B_val[preBar]+0))){exec12_temp=false;} if(exec12_temp){ for(i=preBar+1;i<e12cBar111;i++){ if(!(m1g1c1_Exec_Opt12_A_val>m1g1c1_Exec_Opt12_B_val)){exec12_temp=false;} } } if(!exec12_temp)exec12_b=false; if(exec12_temp){ if(m1g1c1_Exec_Opt12_A_val[e12cBar111]>m1g1c1_Exec_Opt12_B_val[e12cBar111]){exec12_temp=false;} } if(exec12_temp)exec12_a=true; } if(exec12_b){ exec12_temp=true; int e12cBar112=2; if(preBar==1&&e12cBar112==1)e12cBar112=2; for(i=preBar;i<=e12cBar112;i++){ m1g1c2_Exec_Opt12_A_val=iMA(m1g1c2_Exec_Opt12_APara1, m1g1c2_Exec_Opt12_APara2, m1g1c2_Exec_Opt12_APara4, m1g1c2_Exec_Opt12_APara6, m1g1c2_Exec_Opt12_APara3, m1g1c2_Exec_Opt12_APara5, i); m1g1c2_Exec_Opt12_B_val=iMA(m1g1c2_Exec_Opt12_BPara1, m1g1c2_Exec_Opt12_BPara2, m1g1c2_Exec_Opt12_BPara4, m1g1c2_Exec_Opt12_BPara6, m1g1c2_Exec_Opt12_BPara3, m1g1c2_Exec_Opt12_BPara5, i); } if(!(m1g1c2_Exec_Opt12_A_val[preBar]<(m1g1c2_Exec_Opt12_B_val[preBar]-0))){exec12_temp=false;} if(exec12_temp){ for(i=preBar+1;i<e12cBar112;i++){ if(!(m1g1c2_Exec_Opt12_A_val<m1g1c2_Exec_Opt12_B_val)){exec12_temp=false;} } } if(!exec12_temp)exec12_b=false; if(exec12_temp){ if(m1g1c2_Exec_Opt12_A_val[e12cBar112]<m1g1c2_Exec_Opt12_B_val[e12cBar112]){exec12_temp=false;} } if(exec12_temp)exec12_a=true; } if(exec12_a&&exec12_b)exec12=true; if(filter12&&filter34&&exec12)reValue=true; return (reValue); } bool checkM2G1(){ int i; bool reValue=false; int preBar=0; if(Model2_CalculateModel==2)preBar=1; bool filter12=true; bool filter34=true; bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false; if(exec12_b){ exec12_temp=true; int e12cBar211=2; if(preBar==1&&e12cBar211==1)e12cBar211=2; for(i=preBar;i<=e12cBar211;i++){ m2g1c1_Exec_Opt12_A_val=iMA(m2g1c1_Exec_Opt12_APara1, m2g1c1_Exec_Opt12_APara2, m2g1c1_Exec_Opt12_APara4, m2g1c1_Exec_Opt12_APara6, m2g1c1_Exec_Opt12_APara3, m2g1c1_Exec_Opt12_APara5, i); m2g1c1_Exec_Opt12_B_val=iMA(m2g1c1_Exec_Opt12_BPara1, m2g1c1_Exec_Opt12_BPara2, m2g1c1_Exec_Opt12_BPara4, m2g1c1_Exec_Opt12_BPara6, m2g1c1_Exec_Opt12_BPara3, m2g1c1_Exec_Opt12_BPara5, i); } if(!(m2g1c1_Exec_Opt12_A_val[preBar]<(m2g1c1_Exec_Opt12_B_val[preBar]-0))){exec12_temp=false;} if(exec12_temp){ for(i=preBar+1;i<e12cBar211;i++){ if(!(m2g1c1_Exec_Opt12_A_val<m2g1c1_Exec_Opt12_B_val)){exec12_temp=false;} } } if(!exec12_temp)exec12_b=false; if(exec12_temp){ if(m2g1c1_Exec_Opt12_A_val[e12cBar211]<m2g1c1_Exec_Opt12_B_val[e12cBar211]){exec12_temp=false;} } if(exec12_temp)exec12_a=true; } if(exec12_b){ exec12_temp=true; int e12cBar212=2; if(preBar==1&&e12cBar212==1)e12cBar212=2; for(i=preBar;i<=e12cBar212;i++){ m2g1c2_Exec_Opt12_A_val=iMA(m2g1c2_Exec_Opt12_APara1, m2g1c2_Exec_Opt12_APara2, m2g1c2_Exec_Opt12_APara4, m2g1c2_Exec_Opt12_APara6, m2g1c2_Exec_Opt12_APara3, m2g1c2_Exec_Opt12_APara5, i); m2g1c2_Exec_Opt12_B_val=iMA(m2g1c2_Exec_Opt12_BPara1, m2g1c2_Exec_Opt12_BPara2, m2g1c2_Exec_Opt12_BPara4, m2g1c2_Exec_Opt12_BPara6, m2g1c2_Exec_Opt12_BPara3, m2g1c2_Exec_Opt12_BPara5, i); } if(!(m2g1c2_Exec_Opt12_A_val[preBar]>(m2g1c2_Exec_Opt12_B_val[preBar]+0))){exec12_temp=false;} if(exec12_temp){ for(i=preBar+1;i<e12cBar212;i++){ if(!(m2g1c2_Exec_Opt12_A_val>m2g1c2_Exec_Opt12_B_val)){exec12_temp=false;} } } if(!exec12_temp)exec12_b=false; if(exec12_temp){ if(m2g1c2_Exec_Opt12_A_val[e12cBar212]>m2g1c2_Exec_Opt12_B_val[e12cBar212]){exec12_temp=false;} } if(exec12_temp)exec12_a=true; } if(exec12_a&&exec12_b)exec12=true; if(filter12&&filter34&&exec12)reValue=true; return (reValue); } bool checkM3G1(){ int i; bool reValue=false; int preBar=0; if(Model3_CalculateModel==2)preBar=1; bool filter12=true; bool filter34=true; bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false; if(exec12_b){ exec12_temp=true; int e12cBar311=2; if(preBar==1&&e12cBar311==1)e12cBar311=2; for(i=preBar;i<=e12cBar311;i++){ m3g1c1_Exec_Opt12_A_val=iMA(m3g1c1_Exec_Opt12_APara1, m3g1c1_Exec_Opt12_APara2, m3g1c1_Exec_Opt12_APara4, m3g1c1_Exec_Opt12_APara6, m3g1c1_Exec_Opt12_APara3, m3g1c1_Exec_Opt12_APara5, i); m3g1c1_Exec_Opt12_B_val=iMA(m3g1c1_Exec_Opt12_BPara1, m3g1c1_Exec_Opt12_BPara2, m3g1c1_Exec_Opt12_BPara4, m3g1c1_Exec_Opt12_BPara6, m3g1c1_Exec_Opt12_BPara3, m3g1c1_Exec_Opt12_BPara5, i); } if(!(m3g1c1_Exec_Opt12_A_val[preBar]<(m3g1c1_Exec_Opt12_B_val[preBar]-0))){exec12_temp=false;} if(exec12_temp){ for(i=preBar+1;i<e12cBar311;i++){ if(!(m3g1c1_Exec_Opt12_A_val<m3g1c1_Exec_Opt12_B_val)){exec12_temp=false;} } } if(!exec12_temp)exec12_b=false; if(exec12_temp){ if(m3g1c1_Exec_Opt12_A_val[e12cBar311]<m3g1c1_Exec_Opt12_B_val[e12cBar311]){exec12_temp=false;} } if(exec12_temp)exec12_a=true; } if(exec12_a&&exec12_b)exec12=true; if(filter12&&filter34&&exec12)reValue=true; return (reValue); } bool checkM4G1(){ int i; bool reValue=false; int preBar=0; if(Model4_CalculateModel==2)preBar=1; bool filter12=true; bool filter34=true; bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false; if(exec12_b){ exec12_temp=true; int e12cBar411=2; if(preBar==1&&e12cBar411==1)e12cBar411=2; for(i=preBar;i<=e12cBar411;i++){ m4g1c1_Exec_Opt12_A_val=iMA(m4g1c1_Exec_Opt12_APara1, m4g1c1_Exec_Opt12_APara2, m4g1c1_Exec_Opt12_APara4, m4g1c1_Exec_Opt12_APara6, m4g1c1_Exec_Opt12_APara3, m4g1c1_Exec_Opt12_APara5, i); m4g1c1_Exec_Opt12_B_val=iMA(m4g1c1_Exec_Opt12_BPara1, m4g1c1_Exec_Opt12_BPara2, m4g1c1_Exec_Opt12_BPara4, m4g1c1_Exec_Opt12_BPara6, m4g1c1_Exec_Opt12_BPara3, m4g1c1_Exec_Opt12_BPara5, i); } if(!(m4g1c1_Exec_Opt12_A_val[preBar]>(m4g1c1_Exec_Opt12_B_val[preBar]+0))){exec12_temp=false;} if(exec12_temp){ for(i=preBar+1;i<e12cBar411;i++){ if(!(m4g1c1_Exec_Opt12_A_val>m4g1c1_Exec_Opt12_B_val)){exec12_temp=false;} } } if(!exec12_temp)exec12_b=false; if(exec12_temp){ if(m4g1c1_Exec_Opt12_A_val[e12cBar411]>m4g1c1_Exec_Opt12_B_val[e12cBar411]){exec12_temp=false;} } if(exec12_temp)exec12_a=true; } if(exec12_a&&exec12_b)exec12=true; if(filter12&&filter34&&exec12)reValue=true; return (reValue); } bool isNewBar(string s,int timeframe,int model){ datetime currentBarTime = iTime(s,timeframe,0); if(lastBarTime[model]!=currentBarTime){ lastBarTime[model] = currentBarTime; return (true); }else{ return (false); } } double getlots(double DefaultLots,bool MoneyManage,double Risk,double StopLoss,string symbol,int mt,int LotDigits,double MinLots,double MaxLots){ double lot; if(MoneyManage){ if(StopLoss>0)lot=NormalizeDouble((AccountEquity()*(Risk/100))/(MarketInfo(symbol,MODE_TICKVALUE)*mt*StopLoss ),LotDigits); else lot= NormalizeDouble(AccountEquity()/10000,LotDigits); if(lot<MinLots)lot=MinLots; if(lot>MaxLots)lot=MaxLots; }else lot=DefaultLots; return(lot); } int openposition(string symbol,int type,double lots,double StopLoss,double TakeProfit,int magic,bool ECN,bool InstantOrder,bool StopOrder,bool LimitOrder,int Gap,int Expiration,double point,int mt,int Slippage){ int ticket=0;int expire=0;int try=0; if(StopOrder || LimitOrder)if(Expiration>0)expire=TimeCurrent()+(Expiration*60); double ask=MarketInfo(symbol,MODE_ASK);double bid=MarketInfo(symbol,MODE_BID); if(type==OP_BUY){//buy if(ECN){ if(InstantOrder){ while(ticket<=0 && try<maxtry){ RefreshRates(); ticket=open(symbol,OP_BUY,lots,ask,0,0,magic,expire,point,mt,Slippage,Blue); if(ticket<0){try++;if(printLog)Print(\"Error opening Instant BUY order!\",errordescription(GetLastError()),\" retry \"+try+\" times\");} if(ticket>0){ecnsltpLong(ticket,StopLoss,TakeProfit,point);} } } if(StopOrder){ RefreshRates(); ticket=open(symbol,OP_BUYSTOP,lots,ask+Gap*point,0,0,magic,expire,point,mt,Slippage,Blue); if(ticket>0){ecnsltpLong(ticket,StopLoss,TakeProfit,point);} } if(LimitOrder){ RefreshRates(); ticket=open(symbol,OP_BUYLIMIT,lots,bid-Gap*point,0,0,magic,expire,point,mt,Slippage,Blue); if(ticket>0){ecnsltpLong(ticket,StopLoss,TakeProfit,point);} } }else{ if(InstantOrder){ while(ticket<=0 && try<maxtry){ RefreshRates(); ticket=open(symbol,OP_BUY,lots,ask,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Blue); if(ticket<0){try++;if(printLog)Print(\"Error opening Instant BUY order!\",errordescription(GetLastError()),\" retry \"+try+\" times\");} } } if(StopOrder){RefreshRates();ticket=open(symbol,OP_BUYSTOP,lots,ask+Gap*point,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Blue);} if(LimitOrder){RefreshRates();ticket=open(symbol,OP_BUYLIMIT,lots,bid-Gap*point,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Blue);} } }else if(type==OP_SELL){ // Sell if(ECN){ if(InstantOrder){ while(ticket<=0 && try<maxtry){ RefreshRates(); ticket=open(symbol,OP_SELL,lots,bid,0,0,magic,expire,point,mt,Slippage,Red); if(ticket<0){try++;if(printLog)Print(\"Error opening Instant SELL order!\",errordescription(GetLastError()),\" retry \"+try+\" times\");} if(ticket>0){ecnsltpShort(ticket,StopLoss,TakeProfit,point);} } } if(StopOrder){ RefreshRates(); ticket=open(symbol,OP_SELLSTOP,lots,bid-Gap*point,0,0,magic,expire,point,mt,Slippage,Red); if(ticket>0){ecnsltpShort(ticket,StopLoss,TakeProfit,point);} } if(LimitOrder){ RefreshRates(); ticket=open(symbol,OP_SELLLIMIT,lots,ask+Gap*point,0,0,magic,expire,point,mt,Slippage,Red); if(ticket>0){ecnsltpShort(ticket,StopLoss,TakeProfit,point);} } }else{ if(InstantOrder){ while(ticket<=0 && try<maxtry){ RefreshRates(); ticket=open(symbol,OP_SELL,lots,bid,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Red); if(ticket<0){try++;if(printLog)Print(\"Error opening Instant SELL order!\",errordescription(GetLastError()),\" retry \"+try+\" times\");} } } if(StopOrder){RefreshRates();ticket=open(symbol,OP_SELLSTOP,lots,bid-Gap*point,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Red);} if(LimitOrder){RefreshRates();ticket=open(symbol,OP_SELLLIMIT,lots,ask+Gap*point,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Red);} } } return (ticket); } int open(string symbol,int type,double lots,double price,double stoploss,double takeprofit,int magic, int expire,double point,int mt,int Slippage,color clr){ int ticket=0; double sl,tp; if(type==OP_BUY || type==OP_BUYSTOP || type==OP_BUYLIMIT){ if(stoploss>0){sl=price-stoploss*point;}else{sl=0;} if(takeprofit>0){tp=price+takeprofit*point;}else{tp=0;} } if(type==OP_SELL || type==OP_SELLSTOP || type==OP_SELLLIMIT){ if(stoploss>0){sl=price+stoploss*point;}else{sl=0;} if(takeprofit>0){tp=price-takeprofit*point;}else{tp=0;} } ticket=OrderSend(symbol,type,lots,NormalizeDouble(price,MarketInfo(symbol,MODE_DIGITS)),Slippage*mt,sl,tp,\"Prower by myeatrade.com\",magic,expire,clr); return(ticket); } datetime getOrderOpenTime(int ticket){ OrderSelect(ticket,SELECT_BY_TICKET); return (OrderOpenTime()); } void ecnsltpLong(int ticket,double StopLoss,double TakeProfit,double point){ OrderSelect(ticket,SELECT_BY_TICKET); bool succeed;int try; succeed=false;try=0; if(OrderStopLoss()==0&&StopLoss>0){ while(!succeed && try<maxtry){ RefreshRates(); succeed = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-StopLoss*point,MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0,Blue); if(!succeed){try++;if(printLog)Print(\"Error modify long order stoploss!\",errordescription(GetLastError()),\" retry \"+try+\" times\");} } } RefreshRates(); succeed=false;try=0; OrderSelect(ticket,SELECT_BY_TICKET); if(OrderTakeProfit()==0&&TakeProfit>0){ while(!succeed && try<maxtry){ RefreshRates(); succeed = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()+TakeProfit*point,MarketInfo(OrderSymbol(),MODE_DIGITS)),0,Blue); if(!succeed){try++;if(printLog)Print(\"Error modify long order takeprofit!\",errordescription(GetLastError()),\" retry \"+try+\" times\");} } } } void ecnsltpShort(int ticket,double StopLoss,double TakeProfit,double point){ OrderSelect(ticket,SELECT_BY_TICKET); bool succeed;int try; succeed=false;try=0; if(OrderStopLoss()==0&&StopLoss>0){ while(!succeed && try<maxtry){ RefreshRates(); succeed = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+StopLoss*point,MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0,Blue); if(!succeed){try++;if(printLog)Print(\"Error modify short order stoploss!\",errordescription(GetLastError()),\" retry \"+try+\" times\");} } } RefreshRates(); succeed=false;try=0; OrderSelect(ticket,SELECT_BY_TICKET); if(OrderTakeProfit()==0&&TakeProfit>0){ while(!succeed && try<maxtry){ RefreshRates(); succeed = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()-TakeProfit*point,MarketInfo(OrderSymbol(),MODE_DIGITS)),0,Blue); if(!succeed){try++;if(printLog)Print(\"Error modify short order takeprofit!\",errordescription(GetLastError()),\" retry \"+try+\" times\");} } } } int countPositionByMagicSymbol(int magic,string symbol,int hardCloseTime){ int count=0; if(OrdersTotal()>0){ for(int i=OrdersTotal();i>=0;i--){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==magic&&OrderSymbol()==symbol){ count++; if(hardCloseTime>0&&(TimeCurrent()>OrderOpenTime()+hardCloseTime*60)){ if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),MarketInfo(symbol,MODE_BID),0); else if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),MarketInfo(symbol,MODE_ASK),0); } } } return(count); } } void breakEven(int magic,string symbol,int BreakEven,double point){ RefreshRates(); if(OrdersTotal()>0){ for(int i=0;i<OrdersTotal();i++){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL && OrderMagicNumber()==magic && OrderSymbol()==symbol){ if(OrderType()==OP_BUY){ if( NormalizeDouble((MarketInfo(symbol,MODE_BID)-OrderOpenPrice()),MarketInfo(symbol,MODE_DIGITS))>=NormalizeDouble(BreakEven*point,MarketInfo(symbol,MODE_DIGITS))){ if( (OrderStopLoss()-OrderOpenPrice())<0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Blue); } }else{ if( NormalizeDouble((OrderOpenPrice()-MarketInfo(symbol,MODE_ASK)),MarketInfo(symbol,MODE_DIGITS))>=NormalizeDouble(BreakEven*point,MarketInfo(symbol,MODE_DIGITS))){ if(((OrderOpenPrice()-OrderStopLoss())<0)||(OrderStopLoss()==0)) OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red); } } } } } } void trailStop(int magic,string symbol,int TrailMode,int TrailStart,int TrailStop,double point){ RefreshRates(); if(OrdersTotal()>0){ for(int i=0;i<OrdersTotal();i++){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL && OrderMagicNumber()==magic && OrderSymbol()==symbol){ int digits=MarketInfo(symbol,MODE_DIGITS); double ask = MarketInfo(symbol,MODE_ASK);double bid = MarketInfo(symbol,MODE_BID); if(OrderType()==OP_BUY){ if( NormalizeDouble((bid-OrderOpenPrice()),digits)>=NormalizeDouble(TrailStart*point,digits)){ if(TrailMode==1){ if(NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(bid-TrailStop*point,digits)){ OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(bid-TrailStop*point,digits),OrderTakeProfit(),0,Blue); } } if(TrailMode==2){ if(bid-TrailStop*point >=OrderStopLoss()+TrailStop*point){ OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(bid-TrailStop*point,digits),OrderTakeProfit(),0,Blue); } } } }else{ if( NormalizeDouble((OrderOpenPrice()-ask),digits)>=NormalizeDouble(TrailStart*point,digits)){ if(TrailMode==1){ if( (NormalizeDouble(OrderStopLoss(),digits) > NormalizeDouble(ask+TrailStop*point,digits)) || OrderStopLoss()==0 ){ OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(ask+TrailStop*point,digits),OrderTakeProfit(),0,Red); } } if(TrailMode==2){ if((ask+TrailStop*point <=OrderStopLoss()-TrailStop*point) || OrderStopLoss()==0 ){ OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(ask+TrailStop*point,digits),OrderTakeProfit(),0,Blue); } } } } } } } } string errordescription(int code){ string error; switch(code){ case 0: case 1:error=\"no error\";break; case 2:error=\"common error\";break; case 3:error=\"invalid trade parameters\";break; case 4:error=\"trade server is busy\";break; case 5:error=\"old version of the client terminal\";break; case 6:error=\"no connection with trade server\";break; case 7:error=\"not enough rights\";break; case 8:error=\"too frequent requests\";break; case 9:error=\"malfunctional trade operation\";break; case 64:error=\"account disabled\";break; case 65:error=\"invalid account\";break; case 128:error=\"trade timeout\";break; case 129:error=\"invalid price\";break; case 130:error=\"invalid stops\";break; case 131:error=\"invalid trade volume\";break; case 132:error=\"market is closed\";break; case 133:error=\"trade is disabled\";break; case 134:error=\"not enough money\";break; case 135:error=\"price changed\";break; case 136:error=\"off quotes\";break; case 137:error=\"broker is busy\";break; case 138:error=\"requote\";break; case 139:error=\"order is locked\";break; case 140:error=\"long positions only allowed\";break; case 141:error=\"too many requests\";break; case 145:error=\"modification denied because order too close to market\";break; case 146:error=\"trade context is busy\";break; case 4000:error=\"no error\";break; case 4001:error=\"wrong function pointer\";break; case 4002:error=\"array index is out of range\";break; case 4003:error=\"no memory for function call stack\";break; case 4004:error=\"recursive stack overflow\";break; case 4005:error=\"not enough stack for parameter\";break; case 4006:error=\"no memory for parameter string\";break; case 4007:error=\"no memory for temp string\";break; case 4008:error=\"not initialized string\";break; case 4009:error=\"not initialized string in array\";break; case 4010:error=\"no memory for array\\\' string\";break; case 4011:error=\"too long string\";break; case 4012:error=\"remainder from zero divide\";break; case 4013:error=\"zero divide\";break; case 4014:error=\"unknown command\";break; case 4015:error=\"wrong jump (never generated error)\";break; case 4016:error=\"not initialized array\";break; case 4017:error=\"dll calls are not allowed\";break; case 4018:error=\"cannot load library\";break; case 4019:error=\"cannot call function\";break; case 4020:error=\"expert function calls are not allowed\";break; case 4021:error=\"not enough memory for temp string returned from function\";break; case 4022:error=\"system is busy (never generated error)\";break; case 4050:error=\"invalid function parameters count\";break; case 4051:error=\"invalid function parameter value\";break; case 4052:error=\"string function internal error\";break; case 4053:error=\"some array error\";break; case 4054:error=\"incorrect series array using\";break; case 4055:error=\"custom indicator error\";break; case 4056:error=\"arrays are incompatible\";break; case 4057:error=\"global variables processing error\";break; case 4058:error=\"global variable not found\";break; case 4059:error=\"function is not allowed in testing mode\";break; case 4060:error=\"function is not confirmed\";break; case 4061:error=\"send mail error\";break; case 4062:error=\"string parameter expected\";break; case 4063:error=\"integer parameter expected\";break; case 4064:error=\"double parameter expected\";break; case 4065:error=\"array as parameter expected\";break; case 4066:error=\"requested history data in update state\";break; case 4099:error=\"end of file\";break; case 4100:error=\"some file error\";break; case 4101:error=\"wrong file name\";break; case 4102:error=\"too many opened files\";break; case 4103:error=\"cannot open file\";break; case 4104:error=\"incompatible access to a file\";break; case 4105:error=\"no order selected\";break; case 4106:error=\"unknown symbol\";break; case 4107:error=\"invalid price parameter for trade function\";break; case 4108:error=\"invalid ticket\";break; case 4109:error=\"trade is not allowed\";break; case 4110:error=\"longs are not allowed\";break; case 4111:error=\"shorts are not allowed\";break; case 4200:error=\"object is already exist\";break; case 4201:error=\"unknown object property\";break; case 4202:error=\"object is not exist\";break; case 4203:error=\"unknown object type\";break; case 4204:error=\"no object name\";break; case 4205:error=\"object coordinates error\";break; case 4206:error=\"no specified subwindow\";break; default:error=\"unknown error\"; } return(error); } bool checkHasPosition(int magic,string symbol){ if(OrdersTotal()>0){ for(int i=OrdersTotal();i>=0;i--){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==magic&&OrderSymbol()==symbol) return(true); } } return (false); } bool closeModelPosition(int magic,string symbol,double percent,int m,int mt,int Slippage){ double closeLots=0; bool AllClose=true; if(OrdersTotal()>0){ for(int i=OrdersTotal();i>=0;i--){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==magic&&OrderSymbol()==symbol){ if(TimeCurrent()-OrderOpenTime()<m*60){AllClose=false;continue;} closeLots=OrderLots()*percent; if(closeLots<MarketInfo(OrderSymbol(),MODE_MINLOT))closeLots=MarketInfo(OrderSymbol(),MODE_MINLOT); if(OrderType()==OP_BUY){ RefreshRates(); if(!OrderClose(OrderTicket(),closeLots,MarketInfo(symbol,MODE_BID),Slippage*mt)){AllClose=false;} } if(OrderType()==OP_SELL){ RefreshRates(); if(!OrderClose(OrderTicket(),closeLots,MarketInfo(symbol,MODE_ASK),Slippage*mt)){AllClose=false;} } if(OrderType()==OP_BUYLIMIT||OrderType()==OP_BUYSTOP||OrderType()==OP_SELLLIMIT||OrderType()==OP_SELLSTOP){ RefreshRates(); if(!OrderDelete(OrderTicket())){AllClose=false;} } } } } return (AllClose); } |
![]() |
myeatrade 2012-11-28 21:32
一般这样的原因就是后面没有满足你需要的平仓的条件,我们确保只要设置的逻辑正确,生成的代码一定能按设置的逻辑进行运行,请仔细观察检查,设置的相关条件;
请将代码用附件形式上传,上面的代码,我们复制后无法进行编译 |
![]() |
runweihu 2012-11-29 09:30
附件
|
Page 1 of 1
1
请登录后发表回复,如果你还没有账户你可以 免费注册
回到 意见 & 反馈