0
там есть
avatar

AM2

  • 11 декабря 2021, 13:58
0
добавил контрол ма и дельту:


//+------------------------------------------------------------------+
//|                                                          SSL.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот

extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int TrailingStop  = 0;        // трал
extern int Delta         = 300;      // дельта

extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // бар индикатора
extern int CloseSig      = 1;        // 1-закрытие по сигналу
extern int Magic         = 123;      // магик

extern int MAControl     = 300;
extern int MAPeriod      = 40;
extern int MAMethod      = 0;
extern int MAPrice       = 0;

extern int TimeFrame1   =  240;
extern int TimeFrame2   =  1440;

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   double sl=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()<sl)
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()>sl || (OrderStopLoss()==0))
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double ma = iMA(NULL,0,MAPeriod,0,MAMethod,MAPrice,Shift);
   double mac = iMA(NULL,0,MAControl,0,MAMethod,MAPrice,Shift);
   double h4ma = iMA(NULL,TimeFrame1,MAPeriod,0,MAMethod,MAPrice,Shift);
   double d1ma = iMA(NULL,TimeFrame2,MAPeriod,0,MAMethod,MAPrice,Shift);

   bool buy = Bid>ma && Bid>h4ma && Bid>d1ma;
   bool sell = Bid<ma && Bid<h4ma && Bid<d1ma;
   
   double delta = MathAbs(mac-Bid)/_Point;

   if(TrailingStop>0)
      Trailing();

   if(CountTrades()<1 && delta>Delta)
     {
      if(buy)
        {
         PutOrder(0,Ask);
        }
      if(sell)
        {
         PutOrder(1,Bid);
        }
     }

   if(CloseSig>0)
     {
      if(sell)
        {
         CloseAll(0);
        }
      if(buy)
        {
         CloseAll(1);
        }
     }

   Comment("\n Lot: ",Lots);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 11 декабря 2021, 13:22
0
вот набросок с простыми входами и выходами по обратному сигналу на 3-х тф:

вход цена больше ма 40 на всех тф.




//+------------------------------------------------------------------+
//|                                                          SSL.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот

extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int TrailingStop  = 0;        // трал

extern int Slip          = 30;       // реквот
extern int Shift         = 2;        // бар индикатора
extern int CloseSig      = 1;        // 1-закрытие по сигналу
extern int Magic         = 123;      // магик

extern int MAPeriod      = 40;
extern int MAMethod      = 0;
extern int MAPrice       = 0;

extern int TimeFrame1   =  240;
extern int TimeFrame2   =  1440;

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   double sl=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()<sl)
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()>sl || (OrderStopLoss()==0))
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double ma = iMA(NULL,0,MAPeriod,0,MAMethod,MAPrice,Shift);
   double h4ma = iMA(NULL,TimeFrame1,MAPeriod,0,MAMethod,MAPrice,Shift);
   double d1ma = iMA(NULL,TimeFrame2,MAPeriod,0,MAMethod,MAPrice,Shift);

   bool buy = Bid>ma && Bid>h4ma && Bid>d1ma;
   bool sell = Bid<ma && Bid<h4ma && Bid<d1ma;

   if(TrailingStop>0)
      Trailing();

   if(CountTrades()<1)
     {
      if(buy)
        {
         PutOrder(0,Ask);
        }
      if(sell)
        {
         PutOrder(1,Bid);
        }
     }

   if(CloseSig>0)
     {
      if(sell)
        {
         CloseAll(0);
        }
      if(buy)
        {
         CloseAll(1);
        }
     }

   Comment("\n Lot: ",Lots);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 11 декабря 2021, 12:31
0
напишите здесь какие ма и с каким периодом будем использовать на каждом периоде и сейчас напишу
avatar

AM2

  • 11 декабря 2021, 11:14
0
сделал касание и удаление: www.opentraders.ru/downloads/3199/



касание будет если расстояние между ценами закрытия меньше сигмы.

avatar

AM2

  • 11 декабря 2021, 10:53
0
этот индикатор основан на ма, синий квадратик выше ма, красный ниже. в другом топике лучше сделать напрямую по ма и не мучить ни себя ни индикатор.
avatar

AM2

  • 11 декабря 2021, 10:11
0
ак он что, работать то будет?

это зависит от индикатора и производительности компа. напишите будет или нет
avatar

AM2

  • 10 декабря 2021, 23:27
0
и чуть подправил индикатор:


//+------------------------------------------------------------------+
//|                                                          SSL.mq4 |
//|ssl  fast bar mtf                                         Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
//mtf2008fxtsd

#property copyright "Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"

#property indicator_separate_window
//#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1  Blue
#property indicator_color2  Magenta
#property indicator_width1  5
#property indicator_width2  5
#property indicator_minimum 10
#property indicator_maximum 90

//
//
//
//
//

extern int     Lb           = 3;
extern int     sslMA_method =  0;
extern int     SSL_BarLevel = 50;    //BarLevel 10-90

extern int     TimeFrame    =  15;
extern string  TimeFrames   = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";
extern string  MA_method_   = "SMA0 EMA1 SMMA2 LWMA3";

extern bool alertsOn             = true;
extern bool alertsMessageBox     = false;
extern bool alertsSound          = false;
extern string alertsSoundFile    = "expert.wav";  //enterSoundFile
extern bool alertsEmail          = false;
extern bool alertsAfterBarClose  = true;



//
//
//
//
//

double sslHup[];
double sslHdn[];
double hlv[];
string IndicatorFileName;


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   string TimeFrameStr;
   TimeFrame=MathMax(TimeFrame,Period());

   switch(TimeFrame)
     {
      case PERIOD_M1:
         TimeFrameStr="M1"  ;
         break;
      case PERIOD_M5:
         TimeFrameStr="M5"  ;
         break;
      case PERIOD_M15:
         TimeFrameStr="M15" ;
         break;
      case PERIOD_M30:
         TimeFrameStr="M30" ;
         break;
      case PERIOD_H1:
         TimeFrameStr="H1"  ;
         break;
      case PERIOD_H4:
         TimeFrameStr="H4"  ;
         break;
      case PERIOD_D1:
         TimeFrameStr="D1"  ;
         break;
      case PERIOD_W1:
         TimeFrameStr="W1"  ;
         break;
      case PERIOD_MN1:
         TimeFrameStr="MN1" ;
         break;
      default :
         TimeFrameStr="TF0";
     }


   IndicatorBuffers(3);
   SetIndexBuffer(0,sslHup);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,167);
   SetIndexLabel(0,"SSLup "+Lb+" ["+TimeFrame+"]");
   SetIndexBuffer(1,sslHdn);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,167);
   SetIndexLabel(1,"SSLdn "+Lb+" ["+TimeFrame+"]");
   SetIndexBuffer(2,hlv);

   IndicatorShortName("SSL Bar  "+Lb+" ["+TimeFrameStr+"]");
   IndicatorFileName = WindowExpertName();

   return(0);
  }


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }

//
//
//
//
//

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int  counted_bars=200;
   int  i,limit;
   int  y;

   if(counted_bars<0)
      return(-1);
   if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars;


   if(TimeFrame != Period())
     {
      datetime TimeArray[];
      limit = MathMax(limit,TimeFrame/Period());
      ArrayCopySeries(TimeArray, MODE_TIME, NULL,TimeFrame);

      //
      //
      //
      //
      //
      for(i=0; i<limit; i++)
        {
         if(Time[i]<TimeArray[y])
            y++;

         sslHup[i] = iCustom(NULL,TimeFrame,IndicatorFileName,Lb,sslMA_method,SSL_BarLevel,alertsOn,alertsMessageBox,
                             alertsSound,alertsSoundFile,alertsEmail,alertsAfterBarClose,0,y);
         sslHdn[i] = iCustom(NULL,TimeFrame,IndicatorFileName,Lb,sslMA_method,SSL_BarLevel,alertsOn,alertsMessageBox,
                             alertsSound,alertsSoundFile,alertsEmail,alertsAfterBarClose,1,y);


        }


      return(0);
     }


//
//
//
//
//

   for(i=limit; i>=0; i--)
     {
      hlv[i] = hlv[i+1];

      if(Close[i]>iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1))
         hlv[i] =  1;
      if(Close[i]<iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_LOW, i+1))
         hlv[i] = -1;

      if(hlv[i] == -1)
        {
         sslHdn[i] = SSL_BarLevel;
         sslHup[i] = EMPTY_VALUE;
        }
      else
        {
         sslHdn[i] = EMPTY_VALUE;
         sslHup[i] = SSL_BarLevel;
        }
     }


   if(alertsOn)
     {
      int alertBar=0;
      if(alertsAfterBarClose)
         alertBar = 1;

      if(hlv[0+alertBar] != hlv[1+alertBar])
         if(hlv[0+alertBar] == 1)
            doAlert("ВВЕРХ");
         else
            doAlert("вниз");
     }



   return(0);
  }

//+------------------------------------------------------------------+


//
//
//

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void doAlert(string doWhat)
  {
   static string   previousAlert="ждем";
   static datetime previousTime;
   string message;

   if(previousAlert != doWhat || previousTime != Time[0])

     {
      previousAlert  = doWhat;
      previousTime   = Time[0];

      //
      //
      //

      message =  StringConcatenate("SSL-1440 - ",doWhat," ",Symbol()," M",TimeFrame," в ",Close[0]);
      if(alertsMessageBox)
         Alert(message);
      if(alertsEmail)
         SendMail(StringConcatenate(Symbol(),"SSL "),message);
      if(alertsSound)
         PlaySound(alertsSoundFile);
     }
  }

//+------------------------------------------------------------------+

avatar

AM2

  • 10 декабря 2021, 20:35
0
когда сделал открытие закрытие на одном тф, притормаживало но работало. добавил открытие по другим тф сразу все повисло:


//+------------------------------------------------------------------+
//|                                                          SSL.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот

extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int TrailingStop  = 0;        // трал
extern int Delta         = 300;      // расстояние от EМА
extern int MAPeriod      = 100;      // период ЕМА

extern int Slip          = 30;       // реквот
extern int Shift         = 2;        // бар индикатора
extern int CloseSig      = 1;        // 1-закрытие по сигналу
extern int Magic         = 123;      // магик

extern string IndName    = "SSL";
extern int     Lb           = 3;
extern int     sslMA_method = 0;
extern int     SSL_BarLevel = 50;    //BarLevel 10-90

extern int     TimeFrame    =  15;
extern string  TimeFrames   = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";
extern string  MA_method_   = "SMA0 EMA1 SMMA2 LWMA3";

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(CountTrades()>0)
      lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades()),2);
   if(lot>MaxLot)
      lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   double sl=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()<sl)
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()>sl || (OrderStopLoss()==0))
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu1 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,TimeFrame,0,Shift);
   double red1 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,TimeFrame,1,Shift);
   double blu2 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,TimeFrame,0,Shift+1);
   double red2 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,TimeFrame,1,Shift+1);

   double h4blu1 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,240,0,Shift);
   double h4red1 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,240,1,Shift);
   double h4blu2 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,240,0,Shift+1);
   double h4red2 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,240,1,Shift+1);

   double d1blu1 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,1440,0,Shift);
   double d1red1 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,1440,1,Shift);
   double d1blu2 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,1440,0,Shift+1);
   double d1red2 = iCustom(NULL,0,IndName,Lb,sslMA_method,SSL_BarLevel,1440,1,Shift+1);

   double ma = iMA(NULL,0,MAPeriod,0,0,0,Shift);

   bool buy = blu1!=EMPTY_VALUE && red2!=EMPTY_VALUE && h4blu1!=EMPTY_VALUE && d1blu1!=EMPTY_VALUE;
   bool sell = red1!=EMPTY_VALUE && blu2!=EMPTY_VALUE && h4red1!=EMPTY_VALUE && d1red1!=EMPTY_VALUE;

   bool cbuy = (blu1!=EMPTY_VALUE && red2!=EMPTY_VALUE)||(h4blu1!=EMPTY_VALUE && h4red2!=EMPTY_VALUE)||(d1blu1!=EMPTY_VALUE && d1red2!=EMPTY_VALUE);
   bool csell = (red1!=EMPTY_VALUE && blu2!=EMPTY_VALUE)||(h4red1!=EMPTY_VALUE && h4blu2!=EMPTY_VALUE)||(d1red1!=EMPTY_VALUE && d1blu2!=EMPTY_VALUE);

   if(TrailingStop>0)
      Trailing();

   if(CountTrades()<1)
     {
      if(buy)
        {
         PutOrder(0,Ask);
        }
      if(sell)
        {
         PutOrder(1,Bid);
        }
     }

   if(CloseSig>0)
     {
      if(sell)
        {
         CloseAll(0);
        }
      if(buy)
        {
         CloseAll(1);
        }
     }

   Comment("\n blu: ",blu1,
           "\n red: ",red1,
           "\n blu2: ",blu2,
           "\n red2: ",red2);
  }
//+------------------------------------------------------------------+



avatar

AM2

  • 10 декабря 2021, 20:34
0
Когда один график свечой касается другого

машина это не поймет
avatar

AM2

  • 10 декабря 2021, 17:32
0
открывает:



и время еще посмотрите
avatar

AM2

  • 9 декабря 2021, 17:45
0
Андрей можно ли изменить


только так можно изменить:


string symbols[] = {"GBPUSD","EURUSD","USDCHF"};
avatar

AM2

  • 9 декабря 2021, 17:43
0
есть входы на пробой и усреднение 2-х сеток одновременно: www.opentraders.ru/downloads/3198/

avatar

AM2

  • 8 декабря 2021, 20:16
0
что для вас соприкосновение?
avatar

AM2

  • 8 декабря 2021, 17:57
0
В торговле используем индикатор PriseBorder( он у Вас есть)


нет. я переустанавливал терминал

Если что-то непонятно, спрашивайте.

непонятно. сначала ордер на пробой а дальше покажите все пункты тз на скринах
avatar

AM2

  • 8 декабря 2021, 17:51