//+------------------------------------------------------------------+ //| Donchain counter-channel system.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| | //+------------------------------------------------------------------+ #property copyright "by djindyfx" #property link "" extern double Lots =1.0; extern int Slippage=3; extern int Magic =20051006; // Optimalization parameters: extern int LngPeriod=20; extern int ShtPeriod=10; extern int Entry_Stop=50; //extern int TimeFrame =PERIOD_D1; // Time frame of the Donchain indicator. // Privete variables datetime last_trade_time; // in order to execute maximum only one trade a day. //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ReportStrategy(int Magic) { int totalorders=HistoryTotal(); double StrategyProfit=0.0; int StrategyOrders=0; for(int j=0; j 1) { Alert("More than one active trade! Please close the wrong one."); return(-1); } // Lower channel: stop_long=Low[iLowest(NULL,0,MODE_LOW,ShtPeriod,0)]; // Upper channel: stop_short=High[iHighest(NULL,0,MODE_HIGH,ShtPeriod,0)]; if(are_we_long) { // We have long position. Check stop loss: OrderSelect(active_order_ticket, SELECT_BY_TICKET); if(OrderStopLoss() < stop_long) OrderModify(active_order_ticket,OrderOpenPrice(),stop_long,OrderTakeProfit(),0,Blue); //---- return(0); } if(are_we_short) { // We have long position. Check stop loss: OrderSelect(active_order_ticket, SELECT_BY_TICKET); if(OrderStopLoss() > stop_short) OrderModify(active_order_ticket,OrderOpenPrice(),stop_short,OrderTakeProfit(),0,Blue); //---- return(0); } //Do not execute new trade for a next 24 hours. if((CurTime() - last_trade_time)<24*60*60) return(0); // Upper channel: ELong=High[Highest(NULL,0,MODE_HIGH,LngPeriod,0)]; // lower channel: EShort=Low[Lowest(NULL,0,MODE_LOW,LngPeriod,0)]; if(entry_long && entry_short) Alert("Short and long entry. Probably one of the is wrong."); if (ELong==Ask) { OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Bid-Entry_Stop*Point,0, "", Magic,0, FireBrick); last_trade_time=CurTime(); } if(EShort==Bid) { OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Ask+Entry_Stop*Point,0,"",Magic,0,FireBrick); last_trade_time=CurTime(); } //---- return(0); } //+------------------------------------------------------------------+