???????? ?????????????? mql4 ? C# ??? cAlgo API
Created at 23 Oct 2013, 09:07
???????? ?????????????? mql4 ? C# ??? cAlgo API
23 Oct 2013, 09:07
Please help programmers to rewrite adviser from MQL4 to C # for cAlgo API
Advisor to the MT4 demo works fine.
For efficient operation of the adviser to the perfect, fast execution without re-quotes and slippage, low spreads and good liquidity at the right time. Advisor is not a commercial.
I would be very grateful for the work done!
#include #include extern double DeltaExtrim =13;//?????????? ?????????? ? ??? extern double Dbar = 13;//???.????? ???? extern double DbarHL = 13;//???.????? ???? extern int TIME = 1;//????? ??????? ??????????? ????? extern double StopLoss = 2; //????????? ???????? extern double TP = 30; //???? ?????? extern double TrSt = 1; //???? extern double porogP =0;//??? ????? ??????? ????? . ??? extern double porogS =0;//??? ????? ??????? ????? . ??? extern double MinProfit =1;//???. ?????? ??????????? ???????? extern int Speed1 = 1;//?????. ????????????? ????? extern int Speed2 = 1;//?????. ????????????? ????? extern int Speed3 = 3;//?????. ????????????? ????? extern int SpeedDel = 3;//?????. ????????????? ????? extern double Dist = 0.5; // ????????? ??????????? ?????????? extern int Expiration = 0;//????.????? ????? ???????? ( ?? ????? ) ??????? extern int ExpirationAll = 5;//????.????? ????? ???? ??????? extern int NbarExtrim = 15;//?????. ????? ?????????? ??????????? extern bool OneOrderBar = false;//?????????? ?????? ?????? ?????? ? ???? extern double Lot = 0.1; extern double MaxLot = 1000; extern double MinLot = 0.01; extern int NormalizeLot =2;//???????????? ??????? ?????? ????? ???. ? ???????? ???? 1 - 0.1 ....2 - 0.01 extern bool Kmin =false;// ?????????? ???? ?? ???.? ?????? ??????. ?????? =0 ?? ????.(??????????) extern bool TickFiltr = false;//????????? ??????? ??????? ??????????? ????? extern bool LotOptimized = false;//????????? ????????? ? ???? ?? ????????? ??????? extern double Risk = 0.2;//?????? ???? ????????? ??????? ??? LotOptimized = true extern double max_spread =1.5;//????. ???????? ???????????? ?????? ? ??? extern double comis =6;//???????? extern double Klot = 1.1; extern bool ContrOrder = true; extern bool Stop1=true;//????.?????? ?? ??????????? ?? ????? extern bool Stop2=true;//????.?????? ?? ????? ?? ????? extern bool Stop3=true;//????.?????? ?? ????? ? ????? ???? extern bool Market1=false;// extern bool Market2=false;// ?? ?? ?????? ?????? extern bool Market3=false;// extern bool Sound = true; extern string DigString="2 for jpy, 4 for other crosses"; extern int Dig = 5; extern string com = "N"; extern string com1 = "N1"; extern string com2 = "N2"; extern string com3 = "N3"; extern int Magic = 7777; double Point_; datetime nextTime; int cnt, total, lastBars,i,vol; int up=0, down=0, TimeSpeedUp, TimeSpeedDown; bool TimBoolUp,TimBoolDown, OrderSal; double priceUp=0, priceDown=0,profit,eee,lots=0; datetime time; int PipMultiplier=0; void closOrders() { int bo=0,so=0,cb=0,cs=0; for (int q = 0; q < total; q++) { OrderSelect(q, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic&&SpeedDel>0) { if(OrderType()==OP_BUYSTOP&&up <= down-SpeedDel&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderDelete(OrderTicket()); if(OrderType()==OP_SELLSTOP&&up >= down+SpeedDel&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderDelete(OrderTicket()); } } return; } void openOrders() { int b1=0,s1=0,b2=0,s2=0,b3=0,s3=0,bo1=0,so1=0,bo2=0,so2=0,bo3=0,so3=0,cb=0,cs=0,zb=0,zs=0,p=0; if(Kmin==true) { for(i=OrdersHistoryTotal();i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==Magic){ if(OrderCloseTime()!=0) { if(OrderCloseTime()>time){ time=OrderCloseTime(); eee=OrderLots(); profit=OrderProfit(); //?????? if (profit<0)lots=MinLot;//NormalizeDouble(GlobalVariableGet("lot"+com)/Kmin,NormalizeLot); else lots = NormalizeDouble(GlobalVariableGet("lot"+com),NormalizeLot); } } } } } } } if(Kmin==0)lots = NormalizeDouble(GlobalVariableGet("lot"+com),NormalizeLot); if(lots>MaxLot)lots= MaxLot; if(lots= 0; q--) { OrderSelect(q, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic) { if(OrderType()==OP_BUYSTOP&&profit<0&&OrderLots()>MinLot&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderDelete(OrderTicket()); if(OrderType()==OP_SELLSTOP&&profit<0&&OrderLots()>MinLot&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderDelete(OrderTicket()); if(OrderType()==OP_BUYSTOP&&OrderComment()==com1)bo1++; if(OrderType()==OP_SELLSTOP&&OrderComment()==com1)so1++; if(OrderType()==OP_BUYSTOP&&OrderComment()==com2)bo2++; if(OrderType()==OP_SELLSTOP&&OrderComment()==com2)so2++; if(OrderType()==OP_BUYSTOP&&OrderComment()==com3)bo3++; if(OrderType()==OP_SELLSTOP&&OrderComment()==com3)so3++; if(OrderType()==OP_BUY&&OrderComment()==com1+com)b1++; if(OrderType()==OP_SELL&&OrderComment()==com1+com)s1++; if(OrderType()==OP_BUY&&OrderComment()==com2+com)b2++; if(OrderType()==OP_SELL&&OrderComment()==com2+com)s2++; if(OrderType()==OP_BUY&&OrderComment()==com3+com)b3++; if(OrderType()==OP_SELL&&OrderComment()==com3+com)s3++; } } for (int q1 = 0; q1 < total; q1++) { OrderSelect(q1, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic&&zb==1&&OrderType()==OP_BUYSTOP&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderDelete(OrderTicket()); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic&&zs==1&&OrderType()==OP_SELLSTOP&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderDelete(OrderTicket()); } int try; if(Ask-Bid0&&TimeCurrent()-GlobalVariableGet("td"+com)0&&(Ask+Bid)/2-DeltaExtrim*Point*PipMultiplier>iHigh(Symbol(),1,iHighest(Symbol(),1,2,NbarExtrim,1))) { RefreshRates(); if(so1==0&&Stop1==true) OrderSend(Symbol(),OP_SELLSTOP,lots,Bid-Dist*Point*PipMultiplier,2,Bid-Dist*Point*PipMultiplier+(Ask-Bid)+StopLoss*Point*PipMultiplier,0 ,com1,Magic,0,Red); if(s1==0&&Market1==true) OrderSend(Symbol(),OP_SELL,lots,Bid,2,0,0 ,com1+com,Magic,0,Red); cb=1; if(Sound==true)PlaySound("stops.wav" ); } if(up <= down-Speed2&&GlobalVariableCheck("td"+com)&&GlobalVariableGet("td"+com)>0&&TimeCurrent()-GlobalVariableGet("td"+com)0&&Close[0]>Open[0]+Dbar*Point*PipMultiplier) { RefreshRates(); if(so2==0&&Stop2==true) OrderSend(Symbol(),OP_SELLSTOP,lots,Bid-Dist*Point*PipMultiplier,2,Bid-Dist*Point*PipMultiplier+(Ask-Bid)+StopLoss*Point*PipMultiplier,0 ,com2,Magic,0,Red); if(s2==0&&Market2==true) OrderSend(Symbol(),OP_SELL,lots,Bid,2,0,0 ,com2+com,Magic,0,Red); cb=1; if(Sound==true)PlaySound("stops.wav" ); } if(up <= down-Speed3&&GlobalVariableCheck("td"+com)&&GlobalVariableGet("td"+com)>0&&TimeCurrent()-GlobalVariableGet("td"+com)0&&High[0]-Low[0]>DbarHL*Point*PipMultiplier ) { RefreshRates(); if(so3==0&&Stop3==true) OrderSend(Symbol(),OP_SELLSTOP,lots,Bid-Dist*Point*PipMultiplier,2,Bid-Dist*Point*PipMultiplier+(Ask-Bid)+StopLoss*Point*PipMultiplier,0 ,com3,Magic,0,Red); if(s3==0&&Market3==true) OrderSend(Symbol(),OP_SELL,lots,Bid,2,0,0 ,com3+com,Magic,0,Red); cb=1; if(Sound==true)PlaySound("stops.wav" ); } } } else { if(zb==0) { if(up >= down+Speed1&&GlobalVariableCheck("tu"+com)&&GlobalVariableGet("tu"+com)>0&&TimeCurrent()-GlobalVariableGet("tu"+com)0&&(Ask+Bid)/2+DeltaExtrim*Point*PipMultiplier= down+Speed2&&GlobalVariableCheck("tu"+com)&&GlobalVariableGet("tu"+com)>0&&TimeCurrent()-GlobalVariableGet("tu"+com)0&&Close[0]= down+Speed3&&GlobalVariableCheck("tu"+com)&&GlobalVariableGet("tu"+com)>0&&TimeCurrent()-GlobalVariableGet("tu"+com)0&&High[0]-Low[0]>DbarHL*Point*PipMultiplier) { RefreshRates(); if(bo3==0&&Stop3==true) OrderSend(Symbol(),OP_BUYSTOP,lots,Ask+Dist*Point*PipMultiplier,2,Ask+Dist*Point*PipMultiplier-(Ask-Bid)-StopLoss*Point*PipMultiplier,0,com3, Magic, 0, Green); if(b3==0&&Market3==true) OrderSend(Symbol(),OP_BUY,lots,Ask,2,0,0,com3+com, Magic, 0, Green); cs=1; if(Sound==true)PlaySound("stops.wav" ); } } } int zdb=0,zds=0,ddb=0,dds=0; double bst=0,sst=0; for (int n =OrdersTotal(); n >=0; n--) { OrderSelect(n, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY&&OrderProfit()+OrderCommission()>0&&cb==1)OrderClose(OrderTicket(),OrderLots(),Bid,5,CLR_NONE); if(OrderType()==OP_SELL&&OrderProfit()+OrderCommission()>0&&cs==1)OrderClose(OrderTicket(),OrderLots(),Ask,5,CLR_NONE); } } } return; } int init() { if (Digits==3 || Digits==5) PipMultiplier=10; else PipMultiplier=1; return(0); } int deinit() { GlobalVariableDel("tu"+com); GlobalVariableDel("td"+com); GlobalVariableDel("tk"+com); GlobalVariableDel("rtk"+com); GlobalVariableDel("vol"+com); GlobalVariableDel("lot"+com); return(0); } int start() { double p=porogP*Point; double p1=porogS*Point; double ask = (Ask+Bid)/2;//iAD(NULL,0,0);// double ask1= GlobalVariableGet("tk"+com); // double tk=(Ask+Bid)/2; total = OrdersTotal(); int i, currentSymbolOrderPos = -1,q; int l, currentSymbolOrderPos2 = -1; int b=0,s=0; vol = Volume[0]; if(DayOfWeek()==0||DayOfWeek()==6)return(0); for (i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic) { b++; } } //if(DayOfWeek()==1&&b==0&& TimeCurrent()GlobalVariableGet("rtk"+com) { up = up + 1; priceUp = ask;//-p; if(!GlobalVariableCheck("tu"+com))GlobalVariableSet("tu"+com,TimeCurrent()); if(TimBoolUp == false) { TimeSpeedUp = TimeCurrent(); TimBoolUp = true; } } //else if(priceUp > ask+p1) { priceUp = 0; up = 0; TimBoolUp = false; TimeSpeedUp = 0; GlobalVariableDel("tu"+com); } if(TickFiltr==true&&GlobalVariableCheck("vol"+com)&&vol>GlobalVariableGet("vol"+com)+1) { priceUp = 0; up = 0; TimBoolUp = false; TimeSpeedUp = 0; GlobalVariableDel("tu"+com); } if(priceDown > ask+p)//&&MathAbs(tk-GlobalVariableGet("tk"+com))>GlobalVariableGet("rtk"+com) { down = down + 1; priceDown = ask;//+p; if(!GlobalVariableCheck("td"+com))GlobalVariableSet("td"+com,TimeCurrent()); if(TimBoolDown == false) { TimeSpeedDown = TimeCurrent(); TimBoolDown = true; } } //else if(priceDown < ask-p1) { priceDown = 0; down = 0; TimBoolDown = false; TimeSpeedDown = 0; GlobalVariableDel("td"+com); } if(TickFiltr==true&&GlobalVariableCheck("vol"+com)&&vol>GlobalVariableGet("vol"+com)+1) { priceDown = 0; down = 0; TimBoolDown = false; TimeSpeedDown = 0; GlobalVariableDel("td"+com); } if(up >=1 || down >=1)//Speed { openOrders(); } if(up >= SpeedDel || down >= SpeedDel) { closOrders(); } GlobalVariableSet("vol"+com,Volume[0]); if(GlobalVariableCheck("tk"+com))GlobalVariableSet("rtk"+com,MathAbs(ask-GlobalVariableGet("tk"+com))); GlobalVariableSet("tk"+com,ask); ObjectCreate("U", OBJ_LABEL, 0, 0, 0, 0, 0); ObjectSet("U", OBJPROP_CORNER, 2); ObjectSet("U", OBJPROP_YDISTANCE, 30); ObjectSet("U", OBJPROP_XDISTANCE, 10); ObjectSetText("U", "U " + DoubleToStr(up,2),12, "Tahoma",Lime ); ObjectCreate("D", OBJ_LABEL, 0, 0, 0, 0, 0); ObjectSet("D", OBJPROP_CORNER, 2); ObjectSet("D", OBJPROP_YDISTANCE, 15); ObjectSet("D", OBJPROP_XDISTANCE, 10); ObjectSetText("D", "D " + DoubleToStr(down,2),12, "Tahoma",Red ); if(priceUp == 0) { priceUp = ask; } if(priceDown == 0) { priceDown = ask; } //} //else // ???? ???????? ????? ?? ???????? ??????? if(b>0) { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int zdb=0,zds=0,ddb=0,dds=0; string tb="",ts=""; double bst=0,sst=0; for (int n =OrdersTotal(); n >=0; n--) { OrderSelect(n, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY)bst=OrderStopLoss(); if(OrderType()==OP_SELL)sst=OrderStopLoss(); if(OrderType()==OP_BUY)tb=DoubleToStr(OrderTicket(),0); if(OrderType()==OP_SELL)ts=DoubleToStr(OrderTicket(),0); if(OrderType()==OP_BUYSTOP&&OrderComment()==ts)zdb=1; if(OrderType()==OP_SELLSTOP&&OrderComment()==tb)zds=1; } } for (int n1 =OrdersTotal(); n1 >=0; n1--) { OrderSelect(n1, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic) { if(OrderType()==OP_BUYSTOP&&OrderComment()==ts)zdb=1; if(OrderType()==OP_SELLSTOP&&OrderComment()==tb)zds=1; if(OrderType()==OP_BUY&&OrderStopLoss()>OrderOpenPrice()&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))dds=1; if(OrderType()==OP_SELL&&OrderStopLoss()=0; n2--) { OrderSelect(n2, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic) { if(OrderType()==OP_BUYSTOP&&ddb==1)OrderDelete(OrderTicket()); if(OrderType()==OP_SELLSTOP&&dds==1)OrderDelete(OrderTicket()); if(ContrOrder==true&&OrderType()==OP_BUY&&zds==0&&OrderStopLoss()OrderOpenPrice()&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3)) OrderSend(Symbol(),OP_BUYSTOP,Klot*OrderLots(),OrderStopLoss(),2,0,0,DoubleToStr(OrderTicket(),0), Magic, 0, Green); } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// for (int m = 0; m < OrdersTotal(); m++) { OrderSelect(m, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()&&OrderMagicNumber()==Magic) { if(OrderType()==OP_BUYSTOP&&OrderOpenPrice()-Ask>Dist*Point*PipMultiplier&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderModify(OrderTicket(),Ask+Dist*Point*PipMultiplier,Ask+Dist*Point*PipMultiplier-(Ask-Bid)-StopLoss*Point*PipMultiplier,0,0,CLR_NONE); if(OrderType()==OP_SELLSTOP&&Bid-OrderOpenPrice()>Dist*Point*PipMultiplier&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderModify(OrderTicket(),Bid-Dist*Point*PipMultiplier,Bid-Dist*Point*PipMultiplier+(Ask-Bid)+StopLoss*Point*PipMultiplier,0,0,CLR_NONE); if(Expiration>0&&(OrderType()==OP_SELLSTOP||OrderType()==OP_BUYSTOP)&&TimeCurrent()-OrderOpenTime()>Expiration&&(OrderComment()==com1||OrderComment()==com2||OrderComment()==com3))OrderDelete(OrderTicket()); if(ExpirationAll>0&&(OrderType()==OP_SELLSTOP||OrderType()==OP_BUYSTOP)&&TimeCurrent()-OrderOpenTime()>ExpirationAll)OrderDelete(OrderTicket()); if (OrderType() == OP_BUY) { if(OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid - StopLoss*Point*PipMultiplier,Digits),'', 0, Red); } if(OrderTakeProfit()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+TP*Point*PipMultiplier, 0, Red); } if (Bid-OrderOpenPrice()-comis*Point>TrSt*Point*PipMultiplier) { if (OrderStopLoss()=MinProfit*Point*PipMultiplier) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid - (TrSt)*Point*PipMultiplier,'', 0, Red); } } } if (OrderType() == OP_SELL) { if(OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask + StopLoss*Point*PipMultiplier, Digits),'', 0, Red); } if(OrderTakeProfit()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Bid-TP*Point*PipMultiplier, 0, Red); } if (OrderOpenPrice()-comis*Point-Ask > TrSt*Point*PipMultiplier) { if (OrderStopLoss() > Ask +(TrSt)*Point*PipMultiplier&&OrderOpenPrice()-Ask>=MinProfit*Point*PipMultiplier) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask + (TrSt)*Point*PipMultiplier,'', 0, Red); } } } } } } return(0); } double GetLotSize() { if(LotOptimized == TRUE){ double Loty; //........................................................................ int m; double MG; if(Lot>0) { if(AccountFreeMargin()>AccountMargin())MG=AccountFreeMargin(); double Min_Lot = MarketInfo(Symbol(), MODE_LOTSTEP); if(Risk>0) { m=MG/MarketInfo (Symbol(), MODE_MARGINREQUIRED)*Risk/Min_Lot; Loty = m*Min_Lot; if(Loty < MarketInfo(Symbol(), MODE_MINLOT)) Loty =MarketInfo(Symbol(), MODE_MINLOT); if(Loty > MarketInfo (Symbol(), MODE_MAXLOT)) Loty = MarketInfo (Symbol(), MODE_MAXLOT); } } if(Risk==0)Loty= Lot; //......................................................................................, } else { Loty=Lot; } return (Loty); }
Replies
virtuesoft
23 Oct 2013, 17:46
RE: RE:
I see you've updated your post now.
Have you tried the converter on the 2cAlgo website. It might help...
@virtuesoft
virtuesoft
23 Oct 2013, 15:35
RE:
What exactly is your question?
Do you want to know whether the code you pasted is C# or MQL4? If so, then I can say that I think it is MQL4.
@virtuesoft