fractalsusdjpy_190

Author: Copyright � 2005, PavMiGor
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
FractalsMovement directional index
0 Views
0 Downloads
0 Favorites
fractalsusdjpy_190
//+-----------------------------------------------------------------------+
//|                                                          Fractals.mq4 |
//|                                           Copyright © 2005, PavMiGor. |
//|                                                    pavmigor@yandex.ru |
//+-----------------------------------------------------------------------+
#property copyright "Copyright © 2005, PavMiGor"
#property link      "pavmigor@yandex.ru"
//+-----------------------------------------------------------------------+
//| Âíåøíèå ïàðàìåòû                                                      |
//+-----------------------------------------------------------------------+
extern double   Lots=0.1;
extern int      MaxOrders=2, TrailingStop=24, LimitLoss=39, Step=20, PerADX=20;
extern double   MinADX=23;
datetime        TimeUp=0, TimeDown=0;
//+-----------------------------------------------------------------------+
//| Ïîåõàëè                                                               |
//+-----------------------------------------------------------------------+
int start()
   {
    int      i, total, NLong, NShot, Spread, Level, LotPrice, Leverage;
    double   FractalUp, FractalDown, DiPlus, DiMinus, ADX;
    double   StopLoss, TakeProfit, Price, MinLot, Ticket;
    datetime HalfLife, Life;
    Leverage=   100;
    HalfLife=   PerADX*3600;
    Spread=     MarketInfo(Symbol(),MODE_SPREAD);
    MinLot=     MarketInfo(Symbol(),MODE_MINLOT)/100;
    Level=      MarketInfo(Symbol(),MODE_STOPLEVEL);
    LotPrice=   MarketInfo(Symbol(),MODE_LOTSIZE)/Leverage;
    FractalUp=  iFractals(NULL,0,MODE_UPPER,3);
    FractalDown=iFractals(NULL,0,MODE_LOWER,3);
    DiPlus=     iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_PLUSDI,0);
    DiMinus=    iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MINUSDI,0);
    ADX=        iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,0);
    if(Lots<MinLot || TrailingStop<Level || Step<Level) return(0);
//+-----------------------------------------------------------------------+
//| Êîíòðîëü ïîçèöèé                                                      |
//+-----------------------------------------------------------------------+
    total=OrdersTotal(); NLong=0; NShot=0;
    for(i=0;i<total;i++)
       {
        OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol()) NLong++;
        if(OrderType()==OP_BUY && OrderSymbol()==Symbol()) 
          {
           NLong++;
           if(OrderOpenTime()<Time[0])
             {
              if(Bid-OrderOpenPrice()>(TrailingStop+Step)*Point &&
                 OrderStopLoss()<Bid-(TrailingStop+Step)*Point)
                {
                 StopLoss=Bid-TrailingStop*Point;
                 OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Orange);
                 Sleep(10000); return(0);
                 }
              if(OrderTakeProfit()-Bid<=Step*Point)
                {
                 TakeProfit=Bid+2*Step*Point;
                 OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Lime);
                 Sleep(10000); return(0);
                 }
              }
           }
        if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol()) NShot++;
        if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
          {
           NShot++;
           if(OrderOpenTime()<Time[0])
             {                 
              if(OrderOpenPrice()-Ask>(TrailingStop+Step)*Point &&
                 OrderStopLoss()>Ask+(TrailingStop+Step)*Point)
                {
                 StopLoss=Ask+TrailingStop*Point;
                 OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Orange);
                 Sleep(10000); return(0);
                 }
              if(Ask-OrderTakeProfit()<=Step*Point)
                {
                 TakeProfit=Ask-2*Step*Point;
                 OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Lime);
                 Sleep(10000); return(0);
                 }
              }
           }
        }
//+-----------------------------------------------------------------------+
//| Îòêðûòèå ïîçèöèé                                                      |
//+-----------------------------------------------------------------------+
    if(AccountFreeMargin()<LotPrice*Lots*1.5) return(0);
    if(FractalUp==High[3] && DiPlus>=MinADX && ADX>=MinADX &&
       DiPlus>DiMinus && NLong<MaxOrders && TimeUp<Time[0])
      {
       Price=High[3]+Spread*Point; Life=Time[0]+HalfLife;
       StopLoss=MathMin(Low[4],Low[5]); TakeProfit=High[3]+Step*Point;
       if(Price-Ask<Level*Point)
         {
          if(Bid-StopLoss>TakeProfit-Bid) TakeProfit=Bid+(Bid-StopLoss)+Step*Point;
          if(Bid-StopLoss<Level*Point) StopLoss=Bid-Level*Point;
          if(TakeProfit-Bid<(Level+Step)*Point) TakeProfit=Bid+(Level+Step)*Point;
          if(Bid-StopLoss>LimitLoss*Point) StopLoss=Bid-LimitLoss*Point;
          Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,TakeProfit,"FractalUpBuy",0,0,Blue);
          if(Ticket<0) {Sleep(10000); return(0);}
          TimeUp=Time[0]; Sleep(10000); return(0);
          }
       if(Price-Ask>=Level*Point)
         {
          if(Price-StopLoss>TakeProfit-Price) TakeProfit=Price+(Price-StopLoss)+Step*Point;
          if(Price-StopLoss<Level*Point) StopLoss=Price-Level*Point;
          if(TakeProfit-Price<(Level+Step)*Point) TakeProfit=Price+(Level+Step)*Point;
          if(Price-StopLoss>LimitLoss*Point) StopLoss=Price-LimitLoss*Point;
          Ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,StopLoss,TakeProfit,"FractalUpBuyStop",0,Life,Blue);
          if(Ticket<0) {Sleep(10000); return(0);}
          TimeUp=Time[0]; Sleep(10000); return(0);
          }
       }
    if(FractalDown==Low[3] && DiMinus>=MinADX && ADX>=MinADX &&
       DiMinus>DiPlus && NShot<MaxOrders && TimeDown<Time[0])
      {
       Price=Low[3]; Life=Time[0]+HalfLife;
       StopLoss=MathMax(High[4],High[5])+Spread*Point; TakeProfit=Low[3]+(Spread-Step)*Point;
       if(Bid-Price<Level*Point)
         {
          if(StopLoss-Ask>Ask-TakeProfit) TakeProfit=Ask-(StopLoss-Ask)-Step*Point;
          if(StopLoss-Ask<Level*Point) StopLoss=Ask+Level*Point;
          if(Ask-TakeProfit<(Level+Step)*Point) TakeProfit=Ask-(Level-Step)*Point;
          if(StopLoss-Ask>LimitLoss*Point) StopLoss=Ask+LimitLoss*Point;
          Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,TakeProfit,"FractalDownSell",0,0,Red);
          if(Ticket<0) {Sleep(10000); return(0);}
          TimeDown=Time[0]; Sleep(10000); return(0);
          }
       if(Bid-Price>=Level*Point)
         {
          if(StopLoss-Price>Price-TakeProfit) TakeProfit=Price-(StopLoss-Price)-Step*Point;
          if(StopLoss-Price<Level*Point) StopLoss=Price+Level*Point;
          if(Price-TakeProfit<(Level+Step)*Point) TakeProfit=Price-(Level-Step)*Point;
          if(StopLoss-Price>LimitLoss*Point) StopLoss=Price+LimitLoss*Point;
          Ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Price,3,StopLoss,TakeProfit,"FractalDownSellStop",0,Life,Red);
          if(Ticket<0) {Sleep(10000); return(0);}
          TimeDown=Time[0]; Sleep(10000); return(0);
          }
       }
    return(0);
    }
/*       /\                     /\      /\          /\                   
        //\\                   //\\    //\\        //\\                  
       ///\\\                 ///\\\  ///\\\      ///\\\                 
      ///  \\\ /\ ///      \\\\\\ \\\/// /// /\  /// /\          /\      
     ///   /////\\\\\      ////// ///\\\ \\\ \/ /// //\\   /\   //\\  ///
    ///\  //////\\\\\\    //////  \\\///  \\\\\\\\\///\\\ //\\ ///\\\/// 
   ///\\\//////  \\\\\\  //////    \\//    \\\\\\\\\  //////\\\\\\ \\//  
  ///  \\///////\\\\\\\\//////      \/      \\\\\\\\\/// \\\//////  \/   
 ///    \////      \\\\\/////                \\\\\\\\//   \\/////        
 \\\      \\\      /// \/ \\\                ////// \/     \////the end.*/

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 ---