Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //+------------------------------------------------------------------+
- //| Strategy: gustav.mq4 |
- //| Created with EABuilder.com |
- //| http://eabuilder.com |
- //+------------------------------------------------------------------+
- #property copyright "Created with EABuilder.com"
- #property link "http://eabuilder.com"
- #property version "1.00"
- #property description "trend following with nonlagdot(20)"
- #include <stdlib.mqh>
- #include <stderror.mqh>
- extern double BreakEven_Points = 21;
- int LotDigits; //initialized in OnInit
- extern int MagicNumber = 358105;
- int NextOpenTradeAfterBars = 1; //next open trade after time
- datetime LastTradeTime = 0;
- double TradeSize = 0.01;
- int MaxSlippage = 3; //adjusted in OnInit
- int MaxOpenTrades = 1000;
- int MaxLongTrades = 1000;
- int MaxShortTrades = 1000;
- int MaxPendingOrders = 1000;
- bool Hedging = false;
- int OrderRetry = 5; //# of retries if sending order returns error
- int OrderWait = 5; //# of seconds to wait if sending order returns error
- double myPoint; //initialized in OnInit
- void myAlert(string type, string message)
- {
- if(type == "print")
- Print(message);
- else if(type == "error")
- {
- Print(type+" | gustav @ "+Symbol()+","+Period()+" | "+message);
- }
- else if(type == "order")
- {
- Print(type+" | gustav @ "+Symbol()+","+Period()+" | "+message);
- }
- else if(type == "modify")
- {
- Print(type+" | gustav @ "+Symbol()+","+Period()+" | "+message);
- }
- }
- int TradesCount(int type) //returns # of open trades for order type, current symbol and magic number
- {
- int result = 0;
- int total = OrdersTotal();
- for(int i = 0; i < total; i++)
- {
- if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue;
- if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue;
- result++;
- }
- return(result);
- }
- int myOrderSend(int type, double price, double volume, string ordername) //send order, return ticket ("price" is irrelevant for market orders)
- {
- if(!IsTradeAllowed()) return(-1);
- int ticket = -1;
- int retries = 0;
- int err;
- int long_trades = TradesCount(OP_BUY);
- int short_trades = TradesCount(OP_SELL);
- int long_pending = TradesCount(OP_BUYLIMIT) + TradesCount(OP_BUYSTOP);
- int short_pending = TradesCount(OP_SELLLIMIT) + TradesCount(OP_SELLSTOP);
- string ordername_ = ordername;
- if(ordername != "")
- ordername_ = "("+ordername+")";
- //test Hedging
- if(!Hedging && ((type % 2 == 0 && short_trades + short_pending > 0) || (type % 2 == 1 && long_trades + long_pending > 0)))
- {
- myAlert("print", "Order"+ordername_+" not sent, hedging not allowed");
- return(-1);
- }
- //test maximum trades
- if((type % 2 == 0 && long_trades >= MaxLongTrades)
- || (type % 2 == 1 && short_trades >= MaxShortTrades)
- || (long_trades + short_trades >= MaxOpenTrades)
- || (type > 1 && long_pending + short_pending >= MaxPendingOrders))
- {
- myAlert("print", "Order"+ordername_+" not sent, maximum reached");
- return(-1);
- }
- //prepare to send order
- while(IsTradeContextBusy()) Sleep(100);
- RefreshRates();
- if(type == OP_BUY)
- price = Ask;
- else if(type == OP_SELL)
- price = Bid;
- else if(price < 0) //invalid price for pending order
- {
- myAlert("order", "Order"+ordername_+" not sent, invalid price for pending order");
- return(-1);
- }
- int clr = (type % 2 == 1) ? clrRed : clrBlue;
- while(ticket < 0 && retries < OrderRetry+1)
- {
- ticket = OrderSend(Symbol(), type, NormalizeDouble(volume, LotDigits), NormalizeDouble(price, Digits()), MaxSlippage, 0, 0, ordername, MagicNumber, 0, clr);
- if(ticket < 0)
- {
- err = GetLastError();
- myAlert("print", "OrderSend"+ordername_+" error #"+err+" "+ErrorDescription(err));
- Sleep(OrderWait*1000);
- }
- retries++;
- }
- if(ticket < 0)
- {
- myAlert("error", "OrderSend"+ordername_+" failed "+(OrderRetry+1)+" times; error #"+err+" "+ErrorDescription(err));
- return(-1);
- }
- string typestr[6] = {"Buy", "Sell", "Buy Limit", "Sell Limit", "Buy Stop", "Sell Stop"};
- myAlert("order", "Order sent"+ordername_+": "+typestr[type]+" "+Symbol()+" Magic #"+MagicNumber);
- return(ticket);
- }
- int myOrderModify(int ticket, double SL, double TP) //modify SL and TP (absolute price), zero targets do not modify
- {
- if(!IsTradeAllowed()) return(-1);
- bool success = false;
- int retries = 0;
- int err;
- SL = NormalizeDouble(SL, Digits());
- TP = NormalizeDouble(TP, Digits());
- if(SL < 0) SL = 0;
- if(TP < 0) TP = 0;
- //prepare to select order
- while(IsTradeContextBusy()) Sleep(100);
- if(!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
- {
- err = GetLastError();
- myAlert("error", "OrderSelect failed; error #"+err+" "+ErrorDescription(err));
- return(-1);
- }
- //prepare to modify order
- while(IsTradeContextBusy()) Sleep(100);
- RefreshRates();
- if(CompareDoubles(SL, 0)) SL = OrderStopLoss(); //not to modify
- if(CompareDoubles(TP, 0)) TP = OrderTakeProfit(); //not to modify
- if(CompareDoubles(SL, OrderStopLoss()) && CompareDoubles(TP, OrderTakeProfit())) return(0); //nothing to do
- while(!success && retries < OrderRetry+1)
- {
- success = OrderModify(ticket, NormalizeDouble(OrderOpenPrice(), Digits()), NormalizeDouble(SL, Digits()), NormalizeDouble(TP, Digits()), OrderExpiration(), CLR_NONE);
- if(!success)
- {
- err = GetLastError();
- myAlert("print", "OrderModify error #"+err+" "+ErrorDescription(err));
- Sleep(OrderWait*1000);
- }
- retries++;
- }
- if(!success)
- {
- myAlert("error", "OrderModify failed "+(OrderRetry+1)+" times; error #"+err+" "+ErrorDescription(err));
- return(-1);
- }
- string alertstr = "Order modified: ticket="+ticket;
- if(!CompareDoubles(SL, 0)) alertstr = alertstr+" SL="+SL;
- if(!CompareDoubles(TP, 0)) alertstr = alertstr+" TP="+TP;
- myAlert("modify", alertstr);
- return(0);
- }
- void myOrderClose(int type, int volumepercent, string ordername) //close open orders for current symbol, magic number and "type" (OP_BUY or OP_SELL)
- {
- if(!IsTradeAllowed()) return;
- if (type > 1)
- {
- myAlert("error", "Invalid type in myOrderClose");
- return;
- }
- bool success = false;
- int err;
- string ordername_ = ordername;
- if(ordername != "")
- ordername_ = "("+ordername+")";
- int total = OrdersTotal();
- for(int i = total-1; i >= 0; i--)
- {
- while(IsTradeContextBusy()) Sleep(100);
- if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
- if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue;
- while(IsTradeContextBusy()) Sleep(100);
- RefreshRates();
- double price = (type == OP_SELL) ? Ask : Bid;
- double volume = NormalizeDouble(OrderLots()*volumepercent * 1.0 / 100, LotDigits);
- if (NormalizeDouble(volume, LotDigits) == 0) continue;
- success = OrderClose(OrderTicket(), volume, NormalizeDouble(price, Digits()), MaxSlippage, clrWhite);
- if(!success)
- {
- err = GetLastError();
- myAlert("error", "OrderClose"+ordername_+" failed; error #"+err+" "+ErrorDescription(err));
- }
- }
- string typestr[6] = {"Buy", "Sell", "Buy Limit", "Sell Limit", "Buy Stop", "Sell Stop"};
- if(success) myAlert("order", "Orders closed"+ordername_+": "+typestr[type]+" "+Symbol()+" Magic #"+MagicNumber);
- }
- void TrailingStopBE(int type, double profit) //set Stop Loss to open price if in profit
- {
- int total = OrdersTotal();
- profit = NormalizeDouble(profit, Digits());
- for(int i = total-1; i >= 0; i--)
- {
- while(IsTradeContextBusy()) Sleep(100);
- if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
- if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue;
- RefreshRates();
- if((type == OP_BUY && Ask > OrderOpenPrice() + profit)
- || (type == OP_SELL && Bid < OrderOpenPrice() - profit))
- myOrderModify(OrderTicket(), OrderOpenPrice(), 0);
- }
- }
- //+------------------------------------------------------------------+
- //| Expert initialization function |
- //+------------------------------------------------------------------+
- int OnInit()
- {
- //initialize myPoint
- myPoint = Point();
- if(Digits() == 5 || Digits() == 3)
- {
- myPoint *= 10;
- MaxSlippage *= 10;
- }
- //initialize LotDigits
- double LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
- if(LotStep >= 1) LotDigits = 0;
- else if(LotStep >= 0.1) LotDigits = 1;
- else if(LotStep >= 0.01) LotDigits = 2;
- else LotDigits = 3;
- LastTradeTime = 0;
- return(INIT_SUCCEEDED);
- }
- //+------------------------------------------------------------------+
- //| Expert deinitialization function |
- //+------------------------------------------------------------------+
- void OnDeinit(const int reason)
- {
- }
- //+------------------------------------------------------------------+
- //| Expert tick function |
- //+------------------------------------------------------------------+
- void OnTick()
- {
- int ticket = -1;
- double price;
- double SL;
- TrailingStopBE(OP_BUY, BreakEven_Points * myPoint); //Trailing Stop = go break even
- TrailingStopBE(OP_SELL, BreakEven_Points * myPoint); //Trailing Stop = go break even
- //Close Long Positions (Close_Buy_1st_Candle_a_revers)
- RefreshRates();
- if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
- && Ask < Open[1] //Price < Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
- )
- {
- if(IsTradeAllowed())
- myOrderClose(OP_BUY, 100, "Close_Buy_1st_Candle_a_revers");
- else //not autotrading => only send alert
- myAlert("order", "Close_Buy_1st_Candle_a_revers");
- }
- //Close Long Positions (Close_Buy_2nd_Candle_a_revers)
- RefreshRates();
- if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
- && Ask < Open[1] //Price < Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
- )
- {
- if(IsTradeAllowed())
- myOrderClose(OP_BUY, 100, "Close_Buy_2nd_Candle_a_revers");
- else //not autotrading => only send alert
- myAlert("order", "Close_Buy_2nd_Candle_a_revers");
- }
- //Close Long Positions (Close_Buy_3rd_Candle_a_revers)
- RefreshRates();
- if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
- && Ask < Open[1] //Price < Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) > 0 //nonlagdot > fixed value
- )
- {
- if(IsTradeAllowed())
- myOrderClose(OP_BUY, 100, "Close_Buy_3rd_Candle_a_revers");
- else //not autotrading => only send alert
- myAlert("order", "Close_Buy_3rd_Candle_a_revers");
- }
- //Close Long Positions (Close_Buy_4rd_Candle_a_revers)
- RefreshRates();
- if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
- && Ask < Open[1] //Price < Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 5) > 0 //nonlagdot > fixed value
- )
- {
- if(IsTradeAllowed())
- myOrderClose(OP_BUY, 100, "Close_Buy_4rd_Candle_a_revers");
- else //not autotrading => only send alert
- myAlert("order", "Close_Buy_4rd_Candle_a_revers");
- }
- //Close Short Positions (Close_Shrt_1st_Candle_a_revers)
- RefreshRates();
- if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
- && Ask > Open[1] //Price > Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
- )
- {
- if(IsTradeAllowed())
- myOrderClose(OP_SELL, 100, "Close_Shrt_1st_Candle_a_revers");
- else //not autotrading => only send alert
- myAlert("order", "Close_Shrt_1st_Candle_a_revers");
- }
- //Close Short Positions (Close_Shrt_2nd_Candle_a_revers)
- RefreshRates();
- if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
- && Ask > Open[1] //Price > Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
- )
- {
- if(IsTradeAllowed())
- myOrderClose(OP_SELL, 100, "Close_Shrt_2nd_Candle_a_revers");
- else //not autotrading => only send alert
- myAlert("order", "Close_Shrt_2nd_Candle_a_revers");
- }
- //Close Short Positions (Close_Shrt_3rd_Candle_a_revers)
- RefreshRates();
- if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
- && Ask > Open[1] //Price > Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) < 0 //nonlagdot < fixed value
- )
- {
- if(IsTradeAllowed())
- myOrderClose(OP_SELL, 100, "Close_Shrt_3rd_Candle_a_revers");
- else //not autotrading => only send alert
- myAlert("order", "Close_Shrt_3rd_Candle_a_revers");
- }
- //Close Short Positions (Close_Shrt_4rd_Candle_a_revers)
- RefreshRates();
- if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
- && Ask > Open[1] //Price > Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 5) < 0 //nonlagdot < fixed value
- )
- {
- if(IsTradeAllowed())
- myOrderClose(OP_SELL, 100, "Close_Shrt_4rd_Candle_a_revers");
- else //not autotrading => only send alert
- myAlert("order", "Close_Shrt_4rd_Candle_a_revers");
- }
- //Open Buy Order (BUY_1st_after_Trendreverse)
- RefreshRates();
- if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
- && Ask > Open[1] //Price > Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
- )
- {
- RefreshRates();
- price = Ask;
- SL = Low[1]; //Stop Loss = Candlestick Low
- if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
- if(IsTradeAllowed())
- {
- ticket = myOrderSend(OP_BUY, price, TradeSize, "BUY_1st_after_Trendreverse");
- if(ticket <= 0) return;
- }
- else //not autotrading => only send alert
- myAlert("order", "BUY_1st_after_Trendreverse");
- LastTradeTime = TimeCurrent();
- myOrderModify(ticket, SL, 0);
- }
- //Open Buy Order (BUY_2nd_after_Trendreverse)
- RefreshRates();
- if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
- && Ask > Open[1] //Price > Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
- )
- {
- RefreshRates();
- price = Ask;
- SL = Low[2]; //Stop Loss = Candlestick Low
- if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
- if(IsTradeAllowed())
- {
- ticket = myOrderSend(OP_BUY, price, TradeSize, "BUY_2nd_after_Trendreverse");
- if(ticket <= 0) return;
- }
- else //not autotrading => only send alert
- myAlert("order", "BUY_2nd_after_Trendreverse");
- LastTradeTime = TimeCurrent();
- myOrderModify(ticket, SL, 0);
- }
- //Open Buy Order (BUY_3rd_after_Trendreverse)
- RefreshRates();
- if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
- && Ask > Open[1] //Price > Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) < 0 //nonlagdot < fixed value
- )
- {
- RefreshRates();
- price = Ask;
- SL = Low[3]; //Stop Loss = Candlestick Low
- if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
- if(IsTradeAllowed())
- {
- ticket = myOrderSend(OP_BUY, price, TradeSize, "BUY_3rd_after_Trendreverse");
- if(ticket <= 0) return;
- }
- else //not autotrading => only send alert
- myAlert("order", "BUY_3rd_after_Trendreverse");
- LastTradeTime = TimeCurrent();
- myOrderModify(ticket, SL, 0);
- }
- //Open Buy Order (BUY_4rd_after_Trendreverse)
- RefreshRates();
- if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
- && Ask > Open[1] //Price > Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) > 0 //nonlagdot > fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 5) < 0 //nonlagdot < fixed value
- )
- {
- RefreshRates();
- price = Ask;
- SL = Low[4]; //Stop Loss = Candlestick Low
- if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
- if(IsTradeAllowed())
- {
- ticket = myOrderSend(OP_BUY, price, TradeSize, "BUY_4rd_after_Trendreverse");
- if(ticket <= 0) return;
- }
- else //not autotrading => only send alert
- myAlert("order", "BUY_4rd_after_Trendreverse");
- LastTradeTime = TimeCurrent();
- myOrderModify(ticket, SL, 0);
- }
- //Open Sell Order (SELL_1st_after_Trendreverse)
- RefreshRates();
- if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
- && Ask < Open[1] //Price < Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
- )
- {
- RefreshRates();
- price = Bid;
- SL = High[1]; //Stop Loss = Candlestick High
- if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
- if(IsTradeAllowed())
- {
- ticket = myOrderSend(OP_SELL, price, TradeSize, "SELL_1st_after_Trendreverse");
- if(ticket <= 0) return;
- }
- else //not autotrading => only send alert
- myAlert("order", "SELL_1st_after_Trendreverse");
- LastTradeTime = TimeCurrent();
- myOrderModify(ticket, SL, 0);
- }
- //Open Sell Order (SELL_2nd_after_Trendreverse)
- RefreshRates();
- if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
- && Ask < Open[1] //Price < Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
- )
- {
- RefreshRates();
- price = Bid;
- SL = High[2]; //Stop Loss = Candlestick High
- if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
- if(IsTradeAllowed())
- {
- ticket = myOrderSend(OP_SELL, price, TradeSize, "SELL_2nd_after_Trendreverse");
- if(ticket <= 0) return;
- }
- else //not autotrading => only send alert
- myAlert("order", "SELL_2nd_after_Trendreverse");
- LastTradeTime = TimeCurrent();
- myOrderModify(ticket, SL, 0);
- }
- //Open Sell Order (SELL_3rd_after_Trendreverse)
- RefreshRates();
- if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
- && Ask < Open[1] //Price < Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) > 0 //nonlagdot > fixed value
- )
- {
- RefreshRates();
- price = Bid;
- SL = High[3]; //Stop Loss = Candlestick High
- if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
- if(IsTradeAllowed())
- {
- ticket = myOrderSend(OP_SELL, price, TradeSize, "SELL_3rd_after_Trendreverse");
- if(ticket <= 0) return;
- }
- else //not autotrading => only send alert
- myAlert("order", "SELL_3rd_after_Trendreverse");
- LastTradeTime = TimeCurrent();
- myOrderModify(ticket, SL, 0);
- }
- //Open Sell Order (SELL_4rd_after_Trendreverse)
- RefreshRates();
- if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
- && Ask < Open[1] //Price < Candlestick Open
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) < 0 //nonlagdot < fixed value
- && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 5) > 0 //nonlagdot > fixed value
- )
- {
- RefreshRates();
- price = Bid;
- SL = High[4]; //Stop Loss = Candlestick High
- if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
- if(IsTradeAllowed())
- {
- ticket = myOrderSend(OP_SELL, price, TradeSize, "SELL_4rd_after_Trendreverse");
- if(ticket <= 0) return;
- }
- else //not autotrading => only send alert
- myAlert("order", "SELL_4rd_after_Trendreverse");
- LastTradeTime = TimeCurrent();
- myOrderModify(ticket, SL, 0);
- }
- }
- //+------------------------------------------------------------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement