_Turtle Channel System-x4lots

Author: by djindyfx
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites

Profitability Reports

GBP/CAD Oct 2024 - Jan 2025
84.00 %
Total Trades 112
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -26.49
Gross Profit 15800.55
Gross Loss -18767.57
Total Net Profit -2967.02
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
153.00 %
Total Trades 111
Won Trades 53
Lost trades 58
Win Rate 0.48 %
Expected payoff 67.38
Gross Profit 21517.00
Gross Loss -14038.00
Total Net Profit 7479.00
-100%
-50%
0%
50%
100%
_Turtle Channel System-x4lots
//+------------------------------------------------------------------+
//|                              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=100;
//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<totalorders;j++)
     { if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber()==Magic))
        {
         if((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
           {
            StrategyOrders++;
            StrategyProfit+=OrderProfit();
           }
        }
     }
   totalorders=OrdersTotal();
   for(j=0; j<totalorders;j++)
     { 
     if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && (OrderMagicNumber()==Magic))
        {
         if((OrderType()==OP_BUY) ||(OrderType()==OP_SELL))
           {
            StrategyOrders++;
            StrategyProfit+=OrderProfit();
           }
        }
     }
   Comment("Executed ", StrategyOrders, " trades with ", StrategyProfit," of profit");
   return;
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   double stop_short;
   double stop_long;
   double ELong;
   double EShort;
   
//----
   bool entry_short;
   bool entry_long;
   bool are_we_long    =false;
   bool are_we_short   =false;
   bool are_we_PendShort = false;
   bool are_we_PendLong = false;
   int  orders_in_trade=0;
   int  active_order_ticket;
//---- 
   
   //Channels for Entry and Stop
   // Entry Channel
   ELong=High[iHighest(NULL,0,MODE_HIGH,LngPeriod,0)]; 
   EShort=Low[iLowest(NULL,0,MODE_LOW,LngPeriod,0)];
   
   // Stop Channel
   stop_long=Low[iLowest(NULL,0,MODE_LOW,ShtPeriod,0)];
   stop_short=High[iHighest(NULL,0,MODE_HIGH,ShtPeriod,0)]; 
   
   ReportStrategy(Magic);
   // Check current trades:
   int TotalOrders=OrdersTotal();
   
   for(int j=0;j<TotalOrders;j++)
   {
      OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      {
         are_we_long =are_we_long  || OrderType()==OP_BUY;
         are_we_short=are_we_short || OrderType()==OP_SELL;
         are_we_PendShort=are_we_PendShort || OrderType()==OP_SELLSTOP;
         are_we_PendLong=are_we_PendLong || OrderType()==OP_BUYSTOP;
         orders_in_trade++;
         active_order_ticket=OrderTicket();
         
         /*
         // 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 && OrderType()==OP_BUY)
         {
            // 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);
         //----
         }
         
         if(are_we_short && OrderType()==OP_SELL)
         {
           // 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);
         //----
         }
         
         if(are_we_PendLong && OrderType() ==OP_BUYSTOP)
         {
            OrderSelect(active_order_ticket, SELECT_BY_TICKET);
            if((TimeCurrent()- OrderOpenTime())>360*60*60)
               OrderDelete(active_order_ticket);
         }
         
         if(are_we_PendShort && OrderType()==OP_SELLSTOP)
         {
            OrderSelect(active_order_ticket, SELECT_BY_TICKET);
            if((TimeCurrent() -OrderOpenTime())>360*60*60)
               OrderDelete(active_order_ticket);
         }        
      } //not true
    
   }// end for
   if (orders_in_trade > 0)
      return(0);
     
   //Do not execute new trade for a next 24 hours.
  if((TimeCurrent() - last_trade_time)<24*60*60) return(0);
  
  double y = iMA(NULL,0,150,0,MODE_SMA,PRICE_CLOSE,0);
/*
   // Upper channel:
   ELong=High[iHighest(NULL,0,MODE_HIGH,LngPeriod,0)]; 
   // lower channel:
   EShort=Low[iLowest(NULL,0,MODE_LOW,LngPeriod,0)];
*/   
   double ELong1=ELong+50*Point;
   double ELong2=ELong+100*Point;
   double ELong3=ELong+150*Point;
   
   double EShort1=EShort-50*Point;
   double EShort2=EShort-100*Point;
   double EShort3=EShort-150*Point;
   
   //if(entry_long && entry_short)
      //Alert("Short and long entry. Probably one of the is wrong.");
     if (ELong==Ask && Ask>y)
     {
      OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,stop_long/*Bid-Entry_Stop*Point*/,0, "", Magic,0, FireBrick);
      Sleep(2000);
      OrderSend(Symbol(), OP_BUYSTOP, Lots, ELong1, Slippage,stop_long/*Bid-Entry_Stop*Point*/,0, "", Magic,0, FireBrick); 
      Sleep(2000);
      OrderSend(Symbol(), OP_BUYSTOP, Lots, ELong2, Slippage,stop_long /*Bid-Entry_Stop*Point*/,0, "", Magic,0, FireBrick); 
      Sleep(2000);
      OrderSend(Symbol(), OP_BUYSTOP, Lots, ELong3, Slippage,stop_long /*Bid-Entry_Stop*Point*/,0, "", Magic,0, FireBrick); 
      last_trade_time=TimeCurrent();
     }
     
     if(EShort==Bid && Bid<y)
     {
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,stop_short/*Ask+Entry_Stop*Point*/,0,"",Magic,0,FireBrick);
      Sleep(2000);
      OrderSend(Symbol(),OP_SELLSTOP,Lots,EShort1,Slippage,stop_short/*Ask+Entry_Stop*Point*/,0,"",Magic,0,FireBrick);
      Sleep(2000);
      OrderSend(Symbol(),OP_SELLSTOP,Lots,EShort2,Slippage,stop_short/*Ask+Entry_Stop*Point*/,0,"",Magic,0,FireBrick);
      Sleep(2000);
      OrderSend(Symbol(),OP_SELLSTOP,Lots,EShort3,Slippage,stop_short/*Ask+Entry_Stop*Point*/,0,"",Magic,0,FireBrick);
      last_trade_time=TimeCurrent();

     }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---