Dear all,
I have difficulty to write this martingale function from MQL4 to MQL5. Please help me to convert this script to MQL5.
Hi achidayat,
Please don't ask for free code anymore, you asked that a lot around here. Show the MQL5 code that you have written so far and we'll be more vthan happy to help you coding it.
Hi achidayat,
Please don't ask for free code anymore, you asked that a lot around here. Show the MQL5 code that you have written so far and we'll be more vthan happy to help you coding it.
Ok I'am sorry and thank you for your warning. I've tried to convert it to mql5, but not working properly :
double Calculate_Lots() { double lots=Lots; double Loss; double MinLots=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN); double MaxLots=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX); lots=AccountInfoDouble(ACCOUNT_BALANCE)*Risk/100000; else lots=Lots; Loss = 0; int deals=HistoryDealsTotal(); for(int i=0;i<deals;i++) { ulong ticket=HistoryDealGetTicket(i); ENUM_DEAL_ENTRY entry_type=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticket,DEAL_ENTRY); if(entry_type==DEAL_ENTRY_OUT) if (HistoryDealGetDouble(ticket,DEAL_PROFIT)>0) { lots = Lots; Loss = 0; } else { lots = lots * Multiplier; Loss++; } } lots = NormalizeDouble(lots, round); else lots = Lots; } else lots=Lots; if (lots < MinLots) lots = MinLots; if (lots > MaxLots) lots = MaxLots; return (lots); }
Ok I'am sorry and thank you for your warning. I've tried to convert it to mql5, but not working properly :
Hi achidayat,
My apology for late reply, I was busy and I think I gonna be busy again. I don't recommend using Martingale for trading. From what I've read for so many years many loses came from this type of trading, its a trading technique that more close to gamble than to actual trading.
However let's talk about the code, both mql4 and mql5 code are poorly written. There are error in its syntax and its logic also does not makes any sense, it actually even worse than Martingale.
Let me clear what this code is trying to achieve, whe are we multiply the lot size, is it when the previous trade is loss or profit ?.
Hi achidayat,
My apology for late reply, I was busy and I think I gonna be busy again. I don't recommend using Martingale for trading. From what I've read for so many years many loses came from this type of trading, its a trading technique that more close to gamble than to actual trading.
However let's talk about the code, both mql4 and mql5 code are poorly written. There are error in its syntax and its logic also does not makes any sense, it actually even worse than Martingale.
Let me clear what this code is trying to achieve, whe are we multiply the lot size, is it when the previous trade is loss or profit ?.
Of course multiply the lot size when previous trade loss.
In MT4, this code work properly.
Of course multiply the lot size when previous trade loss.
In MT4, this code work properly.
Dear achidayat.
In MT4 its not even compiled, and the logic is an error.
Dear achidayat.
In MT4 its not even compiled, and the logic is an error.
Martingale (increase lot size on losses) is based on something totally opposite to verified, much more secure position sizing approach (reduce lot size on losses, increase lot size on wins). What most traders do not understand is that it is not the indicator or other signal source that is the most important, but the proper risk management and position sizing.
For more refer to http://www.amazon.com/Trade-Your-Way-Financial-Freedom/dp/007147871X/ref=la_B000APL8YW_1_1?ie=UTF8&qid=1344241808&sr=1-1 - plus I would especially recommend playing Van Tharp's "Secrets of the Masters" trading simulation game. It really opens your eyes with regard to trading.
- reviews: 98
- 24.06 USD
- www.amazon.com
Dear achidayat.
In MT4 its not even compiled, and the logic is an error.
I mean this code that work and compiled properly on MT4 :
double GetLots() { double lots=MyLots; double MinLots=NormalizeDouble(MarketInfo(Symbol(),MODE_MINLOT),2); double MaxLots=NormalizeDouble(MarketInfo(Symbol(),MODE_MAXLOT),2); if (MM) MyLots=NormalizeDouble(AccountBalance()*Risk/LotSize,LotsDigit); else MyLots=Lots; if (UseMartingale) { Loss = 0; int round = MathAbs(MathLog(MinLots) / MathLog(10.0)) + 0.5; int total = OrdersHistoryTotal(); for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderProfit() > 0) { lots = MyLots; Loss = 0; } else { lots = lots * Multiplier; Loss++; } } } if (Loss<=MaxLossOrder && Loss>0) lots = NormalizeDouble(lots, round); else lots = MyLots; } else lots=MyLots; if (lots < MinLots) lots = MinLots; if (lots > MaxLots) lots = MaxLots; return (lots); }
I mean this code that work and compiled properly on MT4 :
Hi achidayat,
Yes, thank you for posting a slightly different code that almost compile, may as well give those variable a type so it's really compile.
It compile but it does not run properly, this is the correct one, The return of OrderSelect() is true or false and we must check it
the logic code to search for the last order also dead wrong, That code won't select last order anyway.
We can use datetime open_time as global variable.
I hope you read what Enigma71fx wrote over there
Enigma71fx 2012.08.06 10:33 #
Martingale (increase lot size on losses) is based on something totally opposite to verified, much more secure position sizing approach (reduce lot size on losses, increase lot size on wins). What most traders do not understand is that it is not the indicator or other signal source that is the most important, but the proper risk management and position sizing. ...
Martingale is not a proper risk management and position sizing. Here's some reading on forex Martingale http://www.investopedia.com/articles/forex/06/martingale.asp
static datetime open_time; if (UseMartingale) { Loss = 0; int round = MathAbs(MathLog(MinLots) / MathLog(10.0)) + 0.5; int total = OrdersHistoryTotal(); for (int i = 0; i < total; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderOpenTime() > open_time) { open_time = OrderOpenTime(); if (OrderProfit() > 0) { lots = MyLots; Loss = 0; } else { lots = lots * Multiplier; Loss++; } } } } if (Loss<=MaxLossOrder && Loss>0) lots = NormalizeDouble(lots, round); else lots = MyLots; }
- Kathy Lien
- www.investopedia.com
Hi achidayat,
Yes, thank you for posting a slightly different code that almost compile, may as well give those variable a type so it's really compile.
It compile but it does not run properly, this is the correct one, The return of OrderSelect() is true or false and we must check it
the logic code to search for the last order also dead wrong, That code won't select last order anyway.
We can use datetime open_time as global variable.
I hope you read what Enigma71fx wrote over there
Martingale is not a proper risk management and position sizing. Here's some reading on forex Martingale http://www.investopedia.com/articles/forex/06/martingale.asp
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Dear all,
I have difficulty to write this martingale function from MQL4 to MQL5. Please help me to convert this script to MQL5.