Somebody can help me to make this rigth?
#define SIGNAL_NONE 0 #define SIGNAL_BUY 1 #define SIGNAL_SELL 2 #define SIGNAL_CLOSEBUY 3 #define SIGNAL_CLOSESELL 4 extern int MagicNumber = 0; extern bool SignalMail = False; extern bool EachTickMode = True; extern double Lots = 1.0; extern int Slippage = 3; extern bool UseStopLoss = True; extern int StopLoss = 30; extern bool UseTakeProfit = True; extern int TakeProfit = 60; extern bool UseTrailingStop = True; extern int TrailingStop = 30; extern int bK = 5; extern int bD1 = 3; extern int bD2 = 3; extern int cK = 5; extern int cD1 = 3; extern int cD2 = 3; extern int sma = 500; extern int close_buy = 50; extern int close_sell = 50; extern int sts_max = 90; extern int sts_min = 10; extern int b_mode = 0; extern int s_mode = 0; extern int bc_mode = 0; extern int sc_mode = 0; bool flag = 0; double balance1; double balance2=0; extern int n_perdidas =1; int a=0; int BarCount; int Current; bool TickCheck = False; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { BarCount = Bars; if (EachTickMode) Current = 0; else Current = 1; return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int Order = SIGNAL_NONE; int Total, Ticket; double StopLossLevel, TakeProfitLevel; if (EachTickMode && Bars != BarCount) TickCheck = False; Total = OrdersTotal(); Order = SIGNAL_NONE; //+------------------------------------------------------------------+ //| Variable Begin | //+------------------------------------------------------------------+ double Buy2_1 = iMA(NULL, 0, sma, 0, MODE_EMA, PRICE_CLOSE, Current + 0); double Buy2_2 = iClose(NULL, 0, Current + 0); double Buy1_1 = iStochastic(NULL, 0, bK, bD1, bD2, MODE_SMA, 0, b_mode, Current + 0); double Buy1_2 = sts_min; double Sell2_1 = iMA(NULL, 0, sma, 0, MODE_EMA, PRICE_CLOSE, Current + 0); double Sell2_2 = iClose(NULL, 0, Current + 0); double Sell1_1 = iStochastic(NULL, 0, bK, bD1, bD2, MODE_SMA, 0, s_mode, Current + 0); double Sell1_2 = sts_max; double CloseBuy1_1 = iStochastic(NULL, 0, cK, cD1, cD2, MODE_SMA, 0, bc_mode, Current + 0); double CloseBuy1_2 = close_buy; double CloseSell1_1 = iStochastic(NULL, 0, cK, cD1, cD2, MODE_SMA, 0, sc_mode, Current + 0); double CloseSell1_2 = close_sell; //+------------------------------------------------------------------+ //| Variable End | //+------------------------------------------------------------------+ //Check position bool IsTrade = False; for (int i = 0; i < Total; i ++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) { IsTrade = True; if(OrderType() == OP_BUY) { //Close //+------------------------------------------------------------------+ //| Signal Begin(Exit Buy) | //+------------------------------------------------------------------+ if (CloseBuy1_1 == CloseBuy1_2) Order = SIGNAL_CLOSEBUY; //+------------------------------------------------------------------+ //| Signal End(Exit Buy) | //+------------------------------------------------------------------+ if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy"); if (!EachTickMode) BarCount = Bars; IsTrade = False; continue; } //Trailing stop if(UseTrailingStop && TrailingStop > 0) { if(Bid - OrderOpenPrice() > Point * TrailingStop) { if(OrderStopLoss() < Bid - Point * TrailingStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen); if (!EachTickMode) BarCount = Bars; continue; } } } } else { //Close //+------------------------------------------------------------------+ //| Signal Begin(Exit Sell) | //+------------------------------------------------------------------+ if (CloseSell1_1 == CloseSell1_2) Order = SIGNAL_CLOSESELL; //+------------------------------------------------------------------+ //| Signal End(Exit Sell) | //+------------------------------------------------------------------+ if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell"); if (!EachTickMode) BarCount = Bars; IsTrade = False; continue; } //Trailing stop if(UseTrailingStop && TrailingStop > 0) { if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange); if (!EachTickMode) BarCount = Bars; continue; } } } } } } //+------------------------------------------------------------------+ //| Signal Begin(Entry) | //+------------------------------------------------------------------+ if (Buy1_1 < Buy1_2 && Buy2_1 < Buy2_2 && flag == 0){ Order = SIGNAL_BUY; balance1 = AccountBalance(); if ( balance1 >= balance2){ balance2 = balance1; }else{ a++; } if(a > n_perdidas){ flag =1; }else {flag=0;} } if (Sell1_1 > Sell1_2 && Sell2_1 > Sell2_2 && flag == 0){ Order = SIGNAL_SELL; balance1 = AccountBalance(); if ( balance1 >= balance2){ balance2 = balance1; }else{ a++; } if(a > n_perdidas){ flag =1; }else {flag=0;} } //+------------------------------------------------------------------+ //| Signal End | //+------------------------------------------------------------------+ //Buy if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { if(!IsTrade) { //Check free margin if (AccountFreeMargin() < (1000 * Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0; Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue); if(Ticket > 0) { if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) { Print("BUY order opened : ", OrderOpenPrice()); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy"); } else { Print("Error opening BUY order : ", GetLastError()); } } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } } //Sell if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) { if(!IsTrade) { //Check free margin if (AccountFreeMargin() < (1000 * Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0; Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink); if(Ticket > 0) { if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) { Print("SELL order opened : ", OrderOpenPrice()); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell"); } else { Print("Error opening SELL order : ", GetLastError()); } } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } } if (!EachTickMode) BarCount = Bars; return(0); } //+------------------------------------------------------------------+
Sorry by no say anything in the last post, i was getting an error "Text is too long"
Well, answering to your questions:
balance2 in the begining is 0, because in that case if i compare with
balance1 (balance actual), will be always grather than 0, and all those
variables are global,
a is incrementing per tick,
The idea is very simple (the strategy), but what i really wanna do is fix my optimization problem,
I hope you can help me now
Regards
can someone help me edit sar ohlc to use heiken ashi ohlc
Hi, I have an MTF indicator that uses sar, however I'd like the sar to calculate heiken ashi ohlc, and not the normal type
Can you tell me how I can do this, my mtf indicator calls to the sar indicator to calculate sar formula, I think it is calling to the internal indicator in mt4 that can not edit
you can skype or email if you can assist and like to talk about it
skype sty671
email sty671@gmail.com
I can also supply the original file that I'm trying to use heiken ashi ohlc for
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello Everyone!
I have the following idea, when i made a optimization in MT4 i can't optimie balance and drawdown, and because of that i think in the following idea:
for example: when my buy conditions are TRUE, i set a new parameter "flag",
then i check if the new Balance is greather or equal to last balance, if true, balance2 = balance1, if no, i have a conter "a",
variable a counts the looses, then i set a variable n_Loses (Number of looses that I'm going to accept, for example 30 looses in total)
then if a > n_loses, flag =1, so i can't buy anymore, so when i do my optimization, i'll have an optimization with a maximum of n_loses
Here is the fragment of code:
The problem that i have is when i perform this, the value of "a", a increase to 85 in the first loose.
Somebody can help me to make this rigth?
Sorry about my english.
greetings everyone!