From e51089dbf6446a99c61f48fb7f8bec3557fa739e Mon Sep 17 00:00:00 2001 From: Syarief Azman Date: Tue, 1 Aug 2023 00:19:35 +0800 Subject: [PATCH] convert to new mql formatting --- TradeCopyMaster.ex4 | Bin 0 -> 12111 bytes TradeCopyMaster.mq4 | 252 ++++++++------- TradeCopySlave.ex4 | Bin 0 -> 27705 bytes TradeCopySlave.mq4 | 736 ++++++++++++++++++++++++-------------------- 4 files changed, 545 insertions(+), 443 deletions(-) create mode 100644 TradeCopyMaster.ex4 create mode 100644 TradeCopySlave.ex4 diff --git a/TradeCopyMaster.ex4 b/TradeCopyMaster.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..569e3bdfba27ec723539462b9abf3d65b030d3e9 GIT binary patch literal 12111 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 ys7nMw;Rw9-5~}I>n7j}0) { - FileClose(handle); - }else Print("File open has failed, error: ",GetLastError()); - - return(0); -} +int OnInit() + { + int handle = FileOpen("TradeCopy.csv", FILE_CSV | FILE_WRITE | FILE_COMMON, ","); + if(handle > 0) + { + FileClose(handle); + } + else + Print("File open has failed, error: ", GetLastError()); + return(0); + } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ -int deinit() +void OnDeinit(const int reason) { //---- - -//---- - return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ -int start() { - - while(!IsStopped()) { - start=GetTickCount(); - cmt=start+nl+"Counter: "+TotalCounter; - get_positions(); - if(compare_positions()) save_positions(); - Comment(cmt); - TickCount=GetTickCount()-start; - if(delay>TickCount)Sleep(delay-TickCount-2); - } - Alert("end, TradeCopy EA stopped"); - Comment(""); - return(0); - - +void OnStart() + { + while(!IsStopped()) + { + start = GetTickCount(); + cmt = start + nl + "Counter: " + TotalCounter; + get_positions(); + if(compare_positions()) + save_positions(); + Comment(cmt); + TickCount = GetTickCount() - start; + if(delay > TickCount) + Sleep(delay - TickCount - 2); + } + Alert("end, TradeCopy EA stopped"); + Comment(""); //---- - -} - - -void get_positions() { - Size=OrdersTotal(); - if (Size!= PrevSize) { - ArrayResize(OrdId,Size); - ArrayResize(OrdSym,Size); - ArrayResize(OrdTyp,Size); - ArrayResize(OrdLot,Size); - ArrayResize(OrdPrice,Size); - ArrayResize(OrdSL,Size); - ArrayResize(OrdTP,Size); } - for(int cnt=0;cnt 0) + { + FileWrite(handle, TotalCounter); + TotalCounter++; + for(i = 0; i < Size; i++) + { + FileWrite(handle, OrdId[i], OrdSym[i], OrdTyp[i], OrdLot[i], OrdPrice[i], OrdSL[i], OrdTP[i]); + } + FileClose(handle); + } + else + Print("File open has failed, error: ", GetLastError()); + } - int handle=FileOpen("TradeCopy.csv",FILE_CSV|FILE_WRITE|FILE_COMMON,","); - if(handle>0) { - FileWrite(handle,TotalCounter); - TotalCounter++; - for(i=0;i;UvFDnadsqOcq@L5Rp{n(;>W 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 literal 0 HcmV?d00001 diff --git a/TradeCopySlave.mq4 b/TradeCopySlave.mq4 index 1aeda51..3ff950e 100644 --- a/TradeCopySlave.mq4 +++ b/TradeCopySlave.mq4 @@ -23,400 +23,478 @@ #property copyright "Copyright © 2011-2022, Syslog.eu, rel. 2022-07-15" #property link "http://syslog.eu" // 2012-05-01 Prefix and Suffix added -// 2022-07-15 Possibility to ignore SL and TP - -extern string filename="TradeCopy"; -extern string S1="recalculate Lot by this coefficient:"; -extern double LotCoeff=0.1; -extern string S2="if set, force Lot to this value:"; -extern double ForceLot=0.01; -extern string S3="is set, use this amount for every 0.01 Lot if higher than calculated above:"; -extern double MicroLotBalance=0; -extern int delay=1000; -extern double PipsTolerance=5; -extern int magic=20111219; -extern string Prefix=""; -extern string Suffix=""; -extern bool CopyDelayedTrades=false; -extern bool IgnoreSLTP=false; - -double Balance=0; -int start,TickCount; -int Size=0,RealSize=0,PrevSize=-1; -int cnt,TotalCounter=-1; -int mp=1; +// 2022-07-15 Possibility to ignore SL and TP + +extern string filename = "TradeCopy"; +extern string S1 = "recalculate Lot by this coefficient:"; +extern double LotCoeff = 0.1; +extern string S2 = "if set, force Lot to this value:"; +extern double ForceLot = 0.01; +extern string S3 = "is set, use this amount for every 0.01 Lot if higher than calculated above:"; +extern double MicroLotBalance = 0; +extern int delay = 1000; +extern double PipsTolerance = 5; +extern int magic = 20111219; +extern string Prefix = ""; +extern string Suffix = ""; +extern bool CopyDelayedTrades = false; +extern bool IgnoreSLTP = false; + +double Balance = 0; +int start, TickCount; +int Size = 0, RealSize = 0, PrevSize = -1; +int cnt, TotalCounter = -1; +int mp = 1; string cmt; -string nl="\n"; +string nl = "\n"; -int OrdId[],RealOrdId[]; -string OrdSym[],RealOrdSym[]; +int OrdId[], RealOrdId[]; +string OrdSym[], RealOrdSym[]; string RealOrdOrig[]; -int OrdTyp[],RealOrdTyp[]; -double OrdLot[],RealOrdLot[]; -double OrdPrice[],RealOrdPrice[]; -double OrdSL[],RealOrdSL[]; -double OrdTP[],RealOrdTP[]; +int OrdTyp[], RealOrdTyp[]; +double OrdLot[], RealOrdLot[]; +double OrdPrice[], RealOrdPrice[]; +double OrdSL[], RealOrdSL[]; +double OrdTP[], RealOrdTP[]; string s[]; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ -int init() { +int OnInit() + { //---- - Comment("Waiting for a tick..."); - Print("Waiting for a tick..."); - if (IsStopped()) { - Print("Is Stopped!!!!!!!!!!!"); - } - if (!IsExpertEnabled()) { - Print("Expert Is NOT Enabled!!!!!!!!!!!"); - } - - if (Digits == 5 || Digits == 3){ // Adjust for five (5) digit brokers. - mp=10; - } - + Comment("Waiting for a tick..."); + Print("Waiting for a tick..."); + if(IsStopped()) + { + Print("Is Stopped!!!!!!!!!!!"); + } + if(!IsExpertEnabled()) + { + Print("Expert Is NOT Enabled!!!!!!!!!!!"); + } + if(Digits == 5 || Digits == 3) // Adjust for five (5) digit brokers. + { + mp = 10; + } //---- - return(0); -} + return(0); + } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ -int deinit() +void OnDeinit(const int reason) { //---- - //---- - return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ -int start() { +void OnStart() + { //---- - Print("Got a tick..."); - while(!IsStopped()) { - if(!IsExpertEnabled()) break; - - start=GetTickCount(); - - cmt="TickCount: "+start+nl+"Counter: "+TotalCounter; - - load_positions(); - - for(int i=0;iTickCount)Sleep(delay-TickCount-2); - } + Print("Got a tick..."); + while(!IsStopped()) + { + if(!IsExpertEnabled()) + break; + start = GetTickCount(); + cmt = "TickCount: " + start + nl + "Counter: " + TotalCounter; + load_positions(); + for(int i = 0; i < Size; i++) + { + cmt = cmt + nl + " [ " + OrdId[i] + " ] [ " + OrdSym[i] + " ] [ " + VerbType(OrdTyp[i]) + " ] [ " + OrdLot[i] + " ] [ " + OrdPrice[i] + " ] [ " + OrdSL[i] + " ] [ " + OrdTP[i] + " ]"; + } + // Make sense to make changes only when the market is open and trading allowed + if(IsTradeAllowed() && IsConnected()) + { + compare_positions(); + } + Comment(cmt); + TickCount = GetTickCount() - start; + if(delay > TickCount) + Sleep(delay - TickCount - 2); + } // Alert("end, TradeCopy EA stopped"); - Comment(""); - return(0); - -} - -void load_positions() { - - int handle=FileOpen(filename+".csv",FILE_CSV|FILE_READ|FILE_COMMON,";"); - if(handle>0) { + Comment(""); + } - string line=FileReadString(handle); - if (TotalCounter == StrToInteger(line)) { +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void load_positions() + { + int handle = FileOpen(filename + ".csv", FILE_CSV | FILE_READ | FILE_COMMON, ";"); + if(handle > 0) + { + string line = FileReadString(handle); + if(TotalCounter == StrToInteger(line)) + { + FileClose(handle); + return; + } + else + { + TotalCounter = StrToInteger(line); + } + cnt = 0; + while(FileIsEnding(handle) == false) + { + cmt = cmt + nl + "DEBUG: reading file"; + if(ArraySize(s) < cnt + 1) + ArrayResize(s, cnt + 1); + s[cnt] = FileReadString(handle); + cnt++; + } FileClose(handle); - return; - }else{ - TotalCounter=StrToInteger(line); - } - int cnt=0; - while(FileIsEnding(handle)==false) { - cmt=cmt+nl+"DEBUG: reading file"; - if (ArraySize(s) 0) + { + lot = ForceLot; + } + else + { + lot = lot * LotCoeff; + } + if(Balance < AccountBalance()) + Balance = AccountBalance(); + if(MicroLotBalance > 0) + { + if(MathFloor(Balance / MicroLotBalance) / 100 > lot) + { + lot = MathFloor(Balance / MicroLotBalance) / 100; + } + } +// Print("Calculated lot size: ",lot); + return(NormalizeDouble(lot, DigitsMinLot(symbol))); } -} - -double LotVol(double lot,string symbol) { - if (ForceLot > 0) { - lot=ForceLot; - }else{ - lot=lot*LotCoeff; - } - if (Balance 0) { - if (MathFloor(Balance/MicroLotBalance)/100 > lot) { - lot=MathFloor(Balance/MicroLotBalance)/100; - } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +string VerbType(int type) + { + return (0); + switch(type) + { + case 0: + return ("BUY"); + break; + case 1: + return ("SELL"); + break; + case 2: + return ("BUY LIMIT"); + break; + case 3: + return ("SELL LIMIT"); + break; + case 4: + return ("BUY STOP"); + break; + case 5: + return ("SELL STOP"); + break; + } } -// Print("Calculated lot size: ",lot); - return(NormalizeDouble(lot,DigitsMinLot(symbol))); -} - - -string VerbType (int type) { - switch(type) { - case 0: - return ("BUY"); - break; - case 1: - return ("SELL"); - break; - case 2: - return ("BUY LIMIT"); - break; - case 3: - return ("SELL LIMIT"); - break; - case 4: - return ("BUY STOP"); - break; - case 5: - return ("SELL STOP"); - break; - } -} - - - -int DigitsMinLot(string symbol) { - double ml=MarketInfo(symbol,MODE_MINLOT); +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +int DigitsMinLot(string symbol) + { + double ml = MarketInfo(symbol, MODE_MINLOT); //--- 1/x of lot step - double Dig=0; - if(ml!=0)Dig=1.0/ml; + double Dig = 0; + if(ml != 0) + Dig = 1.0 / ml; //--- conversion of 1/x to digits - double res=0; - if(Dig>1)res=1; - if(Dig>10)res=2; - if(Dig>100)res=3; - if(Dig>1000)res=4; + double res = 0; + if(Dig > 1) + res = 1; + if(Dig > 10) + res = 2; + if(Dig > 100) + res = 3; + if(Dig > 1000) + res = 4; return(res); -} + } -void compare_positions() { +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void compare_positions() + { // load real positions and compare them with master ones - real_positions(); - int x[]; - ArrayResize(x,RealSize); - if (RealSize>0)ArrayInitialize(x,0); + real_positions(); + int x[]; + ArrayResize(x, RealSize); + if(RealSize > 0) + ArrayInitialize(x, 0); // cmt=cmt+nl+"RealSize: "+RealSize; - //Master to Real comparations - for (int i=0;i1 && OrdPrice[i] != RealOrdPrice[j]) { - OrderSelect(RealOrdId[j],SELECT_BY_TICKET); - OrderModify(OrderTicket(),OrdPrice[i],OrderStopLoss(),OrderTakeProfit(),0); + for(int i = 0; i < Size; i++) // for all master orders + { + bool found = false; + for(int j = 0; j < RealSize; j++) // find the right real order + { + if(DoubleToStr(OrdId[i], 0) == RealOrdOrig[j]) + { + //compare values + found = true; + x[j] = 1; + // if not market order, compare open prices - later + //compare volumes - TODO later + //compare open price when delayed order + if(OrdTyp[i] > 1 && OrdPrice[i] != RealOrdPrice[j]) + { + if(OrderSelect(RealOrdId[j], SELECT_BY_TICKET)) + { + bool a = OrderModify(OrderTicket(), OrdPrice[i], OrderStopLoss(), OrderTakeProfit(), 0); + } + } + //compare SL,TP + if(IgnoreSLTP == false && (OrdTP[i] != RealOrdTP[j] || OrdSL[i] != RealOrdSL[j])) + { + if(OrderSelect(RealOrdId[j], SELECT_BY_TICKET)) + { + bool b = OrderModify(OrderTicket(), OrderOpenPrice(), OrdSL[i], OrdTP[i], 0); + } + } + } } - //compare SL,TP - if (IgnoreSLTP==false && (OrdTP[i]!=RealOrdTP[j] || OrdSL[i]!=RealOrdSL[j])) { - OrderSelect(RealOrdId[j],SELECT_BY_TICKET); - OrderModify(OrderTicket(),OrderOpenPrice(),OrdSL[i],OrdTP[i],0); + if(!found) + { + //no position open with this ID, need to open now + int result; + if(OrdTyp[i] < 2) + { + // ------ market order (check Price and OpenPrice) + double Price = MarketPrice(i); + // PipsTolerance for Price: + if((OrdTyp[i] == OP_BUY && Price < OrdPrice[i] + PipsTolerance * mp * Point) || + (OrdTyp[i] == OP_SELL && Price > OrdPrice[i] - PipsTolerance * mp * Point)) + { + result = OrderSend(OrdSym[i], OrdTyp[i], OrdLot[i], Price, 5, 0, 0, DoubleToStr(OrdId[i], 0), magic, 0); + if(result > 0) + { + if(IgnoreSLTP == false) + { bool c = OrderModify(result, OrderOpenPrice(), OrdSL[i], OrdTP[i], 0);} + } + else + Print("Open ", OrdSym[i], " failed: ", GetLastError()); + } + else + Print("Price out of tolerance ", DoubleToStr(OrdId[i], 0), ": ", OrdPrice[i], "/", Price); + } + else + { + // ------ waiting order: + if(CopyDelayedTrades) + result = OrderSend(OrdSym[i], OrdTyp[i], OrdLot[i], OrdPrice[i], 0, OrdSL[i], OrdTP[i], DoubleToStr(OrdId[i], 0), magic, 0); + } } - } - } - if (!found) { - //no position open with this ID, need to open now - int result; - if (OrdTyp[i]<2) { -// ------ market order (check Price and OpenPrice) - double Price=MarketPrice(i); - -// PipsTolerance for Price: - if ((OrdTyp[i]==OP_BUY && PriceOrdPrice[i]-PipsTolerance*mp*Point )) { - - result=OrderSend(OrdSym[i],OrdTyp[i],OrdLot[i],Price,5,0,0,DoubleToStr(OrdId[i],0),magic,0); - if (result>0) { - if (IgnoreSLTP==false) OrderModify(result,OrderOpenPrice(),OrdSL[i],OrdTP[i],0); - }else Print ("Open ",OrdSym[i]," failed: ",GetLastError()); - }else Print ("Price out of tolerance ",DoubleToStr(OrdId[i],0),": ",OrdPrice[i],"/",Price); - }else{ -// ------ waiting order: - if (CopyDelayedTrades) result=OrderSend(OrdSym[i],OrdTyp[i],OrdLot[i],OrdPrice[i],0,OrdSL[i],OrdTP[i],DoubleToStr(OrdId[i],0),magic,0); - } - } - } - for (j=0;j "+x[j]; - if (x[j]!=1) { //no master order, close the ticket -// Price=MarketPrice(RealOrdSym[j],"close"); -// OrderClose(RealOrdId[j],RealOrdLot[j],Price,5,CLR_NONE); - if (RealOrdTyp[j]<2) { - Price=MarketPrice(j,"close"); - result=OrderClose(RealOrdId[j],RealOrdLot[j],Price,5,CLR_NONE); - if (result<1) Print ("Close ",RealOrdId[j]," / ",RealOrdLot[j]," / ",Price," failed: ",GetLastError()); - if (Balance "+x[j]; + if(x[j] != 1) //no master order, close the ticket + { + // Price=MarketPrice(RealOrdSym[j],"close"); + // OrderClose(RealOrdId[j],RealOrdLot[j],Price,5,CLR_NONE); + if(RealOrdTyp[j] < 2) + { + Price = MarketPrice(j, "close"); + result = OrderClose(RealOrdId[j], RealOrdLot[j], Price, 5, CLR_NONE); + if(result < 1) + Print("Close ", RealOrdId[j], " / ", RealOrdLot[j], " / ", Price, " failed: ", GetLastError()); + if(Balance < AccountBalance()) + Balance = AccountBalance(); + } + else + { + bool d = OrderDelete(RealOrdId[j], CLR_NONE); + } + } + } } -} -double MarketPrice(int i ,string typ="open") { - RefreshRates(); - if (typ=="open") { - if (OrdTyp[i]==0) { - Print("Getting Ask open price for buy position..."); - return(NormalizeDouble(MarketInfo(OrdSym[i],MODE_ASK),digits(OrdSym[i]))); - }else{ - Print("Getting Bid open price for sell position..."); - return(NormalizeDouble(MarketInfo(OrdSym[i],MODE_BID),digits(OrdSym[i]))); - } - }else { -//close: - if (RealOrdTyp[i]==0) { - Print("Getting Bid close price for buy position..."); - return(NormalizeDouble(MarketInfo(RealOrdSym[i],MODE_BID),digits(RealOrdSym[i]))); - }else{ - Print("Getting Ask close price for sell position..."); - return(NormalizeDouble(MarketInfo(RealOrdSym[i],MODE_ASK),digits(RealOrdSym[i]))); - } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +double MarketPrice(int i, string typ = "open") + { + RefreshRates(); + if(typ == "open") + { + if(OrdTyp[i] == 0) + { + Print("Getting Ask open price for buy position..."); + return(NormalizeDouble(MarketInfo(OrdSym[i], MODE_ASK), digits(OrdSym[i]))); + } + else + { + Print("Getting Bid open price for sell position..."); + return(NormalizeDouble(MarketInfo(OrdSym[i], MODE_BID), digits(OrdSym[i]))); + } + } + else + { + //close: + if(RealOrdTyp[i] == 0) + { + Print("Getting Bid close price for buy position..."); + return(NormalizeDouble(MarketInfo(RealOrdSym[i], MODE_BID), digits(RealOrdSym[i]))); + } + else + { + Print("Getting Ask close price for sell position..."); + return(NormalizeDouble(MarketInfo(RealOrdSym[i], MODE_ASK), digits(RealOrdSym[i]))); + } + } } -} -void real_positions() { - - int i=0; - for(int cnt=0;cnt