0
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
extern string IndName    = "StepMA NMC v3.01";

extern int    PdfMaLength         = 10;      // Pdfma Length
extern double Sensitivity         = 5;       // Sensivity Factor
extern double StepSize            = 2;       // Constant Step Size
extern double Variance            = 1;       // Pdfma variance
extern double Mean                = 0.0;     // Pdfma mean
avatar

ssg

  • 28 мая 2020, 16:31
0
Slava78, в шапке советника название тоже надо менять. Будет проще ориентироваться. И не плохо в разных версиях комментировать внесенные изменения.
avatar

ssg

  • 28 мая 2020, 16:23
0
Отбой! Нашёл
double a=iCustom(NULL,TF,"Super-Point-Signal",0,1);
 double b=iCustom(NULL,TF,"Super-Point-Signal",1,1); 

Так в чем проблема с советником при работе не в тестере?
avatar

ssg

  • 28 мая 2020, 16:19
0
А в коде советника super-limmon2.mq4 что то я не увидел упоминания о индикаторе супер поинт?( 
avatar

ssg

  • 28 мая 2020, 15:59
0
А попробуй за комментировать и прогони в тестере.:) 
avatar

ssg

  • 25 мая 2020, 16:23
0
;) Это для чего нужно
<code>TimeBar=Time[0]+Period()*TaimOut*60;</code>
avatar

ssg

  • 25 мая 2020, 06:52
0
Управляя любым механизмом (автомобиль, бетономешалка ...) нужно понимать как он работает
Собираешься торговать советником должен понимать принцип его работы.Одного тестирования в тестере и даже на демосчете «маловато будет».
Пусть человек не программирует, но по коду советника он должен разбираться за что отвечает и что делает каждый блок отдельно и весь советник в целом.
avatar

ssg

  • 25 мая 2020, 05:38
0
На этом сказка: «О старике и золотой рыбке.» для старухи закончилась.
avatar

ssg

  • 25 мая 2020, 05:12
0
Еще раз.
Пожелания нужно описывать словами и строго по пунктам.Никакой лирики.
Фразы:«Посмотрите видеоролик, и сделайте мне так же.» неинтересны. Нет желания и жалко на это тратить время.
Нет желания вникать и разбираться в чужом коде. У каждого свой свой стиль написания программы.
По существу:
1.Удаляете полностью старый блок настроек (он самый первый).
2.На его место копируете этот блок:

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 0;        // стоп лосс
extern int TakeProfit    = 0;        // тейк профит
extern double Profit     = 100;      // общая прибыль
extern double Loss       = 100;      // общий убыток
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 0;        // пункты БУ
extern int TrailingStop  = 0;        // трал
extern bool Usredn       = 1;        // 1-использовать усреднение 0-не использовать
extern int Step          = 50;       // шаг усреднения
extern int Count         = 5;        // число ордеров
extern bool Buy          = 1;        //1-выстовить бай 0-не выставлять
extern bool Buystop      = 1;        //1-выстовить байстоп 0-не выставлять
extern int Step_stop     = 50;       // дистанция для стопордера
extern int Count_bs      = 5;        // число ордеров байстоп
extern bool Buylimit     = 1;        //1-выстовить байлимит 0-не выставлять
extern int Step_limit    = 50;       // дистанция для лимитордера
extern int Count_bl      = 5;        // число ордеров байлимт
extern bool Sell         = 1;        //1-выстовить селл 0-не выставлять
extern bool Sellstop     = 1;        //1-выстовить селлстоп 0-не выставлять
extern int Count_ss      = 5;        // число ордеров селлстоп
extern bool Selllimit    = 1;        //1-выстовить селлимит 0-не выставлять
extern int Count_sl      = 5;        // число ордеров селллимит
extern int Expiration    = 5;        // истечение
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int CloseSig      = 0;        // 1-закрытие по сигналу 0-нет
extern int TaimOut       = 1;        // тайм аут ордера
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

extern int MAPeriod      = 240;      // период МА
extern int EPeriod       = 240;
extern int Method        = 0;
extern int Price1        = 0;
extern int Shift         = 0;
extern double Dev        = 0.3;

datetime TimeBar;


3.Удаляете полностью блок функции void OnTick()(он последний в советнике)
4.На его место копируете этот блок:
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int i;
   double price=0;
   
   double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift);
   double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1);
   double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1);
   
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();
   if(AllProfit()>Profit && Profit>0) CloseAll();
   if(AllProfit()<-Loss && Loss>0) CloseAll();

//------------------------------
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {
      if(Ask<EDN) 
        {
         if(Buy)PutOrder(0,Ask); TimeBar=Time[0]+Period()*TaimOut*60;
//-----         
         if(Buylimit)
          {
           for (i=0; i<Count_bl; i++)
             {
               price=NormalizeDouble(Ask-Step_limit*(i+1)*Point,Digits); 
               PutOrder(2,price);         
             }
           } 
//-----            
          if(Sellstop) 
          {
           for (i=0; i<Count_bl; i++)
             {
               price=NormalizeDouble(Bid-Step_stop*(i+1)*Point,Digits); 
               PutOrder(5,price);         
             }
           } 
        }
//-------------------------------      
      if(Bid>EUP)
        {
          if(Sell)PutOrder(1,Bid); TimeBar=Time[0]+Period()*TaimOut*60;
//-----          
          if(Selllimit)
          {
           for (i=0; i<Count_sl; i++)
             {
               price=NormalizeDouble(Bid+Step_limit*(i+1)*Point,Digits);    
               PutOrder(3,price);
             }
           }
//-----          
          if(Buystop)
          {
           for (i=0; i<Count_sl; i++)
             {
               price=NormalizeDouble(Ask+Step_stop*(i+1)*Point,Digits);    
               PutOrder(4,price);
             }
           } 
          
        }    
     }
//--- 
 if(Usredn)
  {
   if(CountTrades()>0 && CountTrades()<Count)
     {
      if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask);  
      if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid); 
     }
  }
   if(CloseSig>0)
     {
      if(Bid>ma) CloseAll(0);
      if(Ask<ma)  CloseAll(1);
     }

   Comment("\n Lot: ",Lot(),
           "\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+


Оба этих блока я уже приводил выше.
5.Компилируете.
6.В блоке настроек находятся триггеры(выключатели) возле них описание.
Пример:
extern bool Buy          = 1;        //1-выстовить бай 0-не выставлять

Если — 1 советник быдет открывать позиции с рынка.
Если — 0 советник не будет открывать позиции с рынка.
Аналогичные триггеры для позиции селл, ордеров байлимит, селллимит, байстоп, селлсто и для усреднения.
Кроме этого в настройках можно указать и количество отложенных ордеров как лимитных ордеров каждого направления по отдельности:
extern int Count_bl      = 5;        // число ордеров байлимт

так и стоповых, тоже по отдельности.
Ордера буду выставляться с шагом:
extern int Step_limit    = 50;       // дистанция для лимитордера

7.Все.

avatar

ssg

  • 25 мая 2020, 05:07
0
Slava78, человек еще новичок на форексе, или просто балуется, а не работает.
Иначе он бы уже за полгода научился бы понимать (не программировать) о чем идет речь в функции старт.
Или научится, или забросит баловаться, когда несколько депозитов сольет.<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/017.gif' alt=' ;) '>&nbsp; 
avatar

ssg

  • 24 мая 2020, 17:11
0
Ну если нужно то прикрути. Кто запрещает.
avatar

ssg

  • 24 мая 2020, 17:04
0
А для многообразия поменять блок настройки на этот блок

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 0;        // стоп лосс
extern int TakeProfit    = 0;        // тейк профит
extern double Profit     = 100;      // общая прибыль
extern double Loss       = 100;      // общий убыток
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 0;        // пункты БУ
extern int TrailingStop  = 0;        // трал
extern bool Usredn       = 1;        // 1-использовать усреднение 0-не использовать
extern int Step          = 50;       // шаг усреднения
extern int Count         = 5;        // число ордеров
extern bool Buy          = 1;        //1-выстовить бай 0-не выставлять
extern bool Buystop      = 1;        //1-выстовить байстоп 0-не выставлять
extern int Step_stop     = 50;       // дистанция для стопордера
extern int Count_bs      = 5;        // число ордеров байстоп
extern bool Buylimit     = 1;        //1-выстовить байлимит 0-не выставлять
extern int Step_limit    = 50;       // дистанция для лимитордера
extern int Count_bl      = 5;        // число ордеров байлимт
extern bool Sell         = 1;        //1-выстовить селл 0-не выставлять
extern bool Sellstop     = 1;        //1-выстовить селлстоп 0-не выставлять
extern int Count_ss      = 5;        // число ордеров селлстоп
extern bool Selllimit    = 1;        //1-выстовить селлимит 0-не выставлять
extern int Count_sl      = 5;        // число ордеров селллимит
extern int Expiration    = 5;        // истечение
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int CloseSig      = 0;        // 1-закрытие по сигналу 0-нет
extern int TaimOut       = 1;        // тайм аут ордера
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

extern int MAPeriod      = 240;      // период МА
extern int EPeriod       = 240;
extern int Method        = 0;
extern int Price1        = 0;
extern int Shift         = 0;
extern double Dev        = 0.3;

datetime TimeBar;


и этот блок
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int i;
   double price=0;
   
   double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift);
   double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1);
   double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1);
   
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();
   if(AllProfit()>Profit && Profit>0) CloseAll();
   if(AllProfit()<-Loss && Loss>0) CloseAll();

//------------------------------
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {
      if(Ask<EDN) 
        {
         if(Buy)PutOrder(0,Ask); TimeBar=Time[0]+Period()*TaimOut*60;
//-----         
         if(Buylimit)
          {
           for (i=0; i<Count_bl; i++)
             {
               price=NormalizeDouble(Ask-Step_limit*(i+1)*Point,Digits); 
               PutOrder(2,price);         
             }
           } 
//-----            
          if(Sellstop) 
          {
           for (i=0; i<Count_bl; i++)
             {
               price=NormalizeDouble(Bid-Step_stop*(i+1)*Point,Digits); 
               PutOrder(5,price);         
             }
           } 
        }
//-------------------------------      
      if(Bid>EUP)
        {
          if(Sell)PutOrder(1,Bid); TimeBar=Time[0]+Period()*TaimOut*60;
//-----          
          if(Selllimit)
          {
           for (i=0; i<Count_sl; i++)
             {
               price=NormalizeDouble(Bid+Step_limit*(i+1)*Point,Digits);    
               PutOrder(3,price);
             }
           }
//-----          
          if(Buystop)
          {
           for (i=0; i<Count_sl; i++)
             {
               price=NormalizeDouble(Ask+Step_stop*(i+1)*Point,Digits);    
               PutOrder(4,price);
             }
           } 
          
        }    
     }
//--- 
 if(Usredn)
  {
   if(CountTrades()>0 && CountTrades()<Count)
     {
      if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask);  
      if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid); 
     }
  }
   if(CloseSig>0)
     {
      if(Bid>ma) CloseAll(0);
      if(Ask<ma)  CloseAll(1);
     }

   Comment("\n Lot: ",Lot(),
           "\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+


И фантазируй дальше.
Хочешь позиции с рынка — пожалуйста.
Хочешь стоповые, хочешь лимитные, хочешь и те и другие и третьи, хочешь по одному, а хочешь пачку.
avatar

ssg

  • 24 мая 2020, 09:31
0
Лучше их за комментировать. Вдруг желание поменяется или появятся варианты.
avatar

ssg

  • 24 мая 2020, 09:21
0
Настройки смотрите.
avatar

ssg

  • 24 мая 2020, 05:07
0
так замените.
avatar

ssg

  • 23 мая 2020, 20:39
0
Замените рси на стохастик
//+------------------------------------------------------------------+
//|                                            Envelopes for RSI.mq4 |
//|                                              Copyright 2018, Tor |
//|                          https://www.mql5.com/ru/users/tormovies |
//+------------------------------------------------------------------+
/*
https://www.mql5.com/ru/code/21187
Очередная версия стрелочного канального индикатора Envelopes, который строится на стандартном индикаторе RSI. 
Не все трейдеры согласны ждать пересечения индикатором RSi общих уровней перекупленности и перепроданности, 
поэтому они строят усредненные каналы RSI, например, BB или Envelopes. 
Envelopes построить стандартными способами над индикатором RSI нельзя, наш индикатор теперь решает эту проблему.

Индикатор рисует стрелки или вертикальные линии на местах пересечений данных уровней Envelopes:
?Для продажи - пересечение верхнего уровня Envelopes сверху вниз;
?Для покупки - пересечение нижнего уровня Envelopes снизу вверх.

*/
#property copyright "Copyright 2018, Tor"
#property link      "https://www.mql5.com/ru/users/tormovies"
#property version   "1.0"
#property description "This indicator is based on standard indicator Relative Strength Index"
#property description "and draws a Envelopes channel for him"
#property strict
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_minimum 0
#property indicator_maximum 100

input string t1="--- Input RSI parameters ---";
input int RSIPeriod = 14; // RSI Period
input int MaxLevel = 70;  // Max signal level
input int MinLevel = 30;  // Min signal level
input color rsicolor=clrDodgerBlue;// RSI color
input int rsiwidth=1;   // RSI width

input string t2="--- Input Envelopes parameters ---";
input int EnvPeriod=80; // Envelopes Period
input ENUM_MA_METHOD EnvMethod=MODE_EMA;//Envelopes method
input double EnvDeviation= 35;// Envelopes Deviation
input color Envcolor=clrLime;// Envelopes Color
input int EnvWidth=1;// Envelopes Width
input ENUM_LINE_STYLE EnvStyle=STYLE_SOLID;// Envelopes line style

input string t3="--- Other parameters ---";
input int alertShift=1; // Candle which look for the signal (0 = current candle)
input bool showLine=false; // Show vertical lines
input bool showArrows=true; // Show arrows

double RSIx[],bbup[],bbdn[],buy[],sell[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   IndicatorShortName("Env for RSI");
   SetIndexBuffer(0,RSIx);
   SetIndexBuffer(1,bbup);
   SetIndexBuffer(2,bbdn);
   SetIndexBuffer(3,buy);
   SetIndexBuffer(4,sell);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,rsiwidth,rsicolor);
   SetIndexStyle(1,DRAW_LINE,EnvStyle,EnvWidth,Envcolor);
   SetIndexStyle(2,DRAW_LINE,EnvStyle,EnvWidth,Envcolor);
   SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,1,clrBlue);
   SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID,1,clrRed);
   SetIndexArrow(3,233);
   SetIndexArrow(4,234);
   SetIndexLabel(0,"RSI");
   SetIndexLabel(1,"Envelopes Up");
   SetIndexLabel(2,"Envelopes Down");
   SetLevelValue(1,MinLevel);
   SetLevelValue(2,MaxLevel);
   SetLevelValue(3,50);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
int deinit()
  {
   del("Envfrs_");
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

   int limit; int xxx=0;
   static datetime altime=0;
//---
   if(rates_total<=1)
      return(0);
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit=limit+2;

   for(int x=limit-2; x>=0; x--)
     {
      RSIx[x]=iRSI(Symbol(),0,RSIPeriod,PRICE_CLOSE,x);
     }
   for(int x2=limit-2; x2>=0; x2--)
     {
      bbup[x2]=iEnvelopesOnArray(RSIx,0,EnvPeriod,EnvMethod,0,EnvDeviation,MODE_UPPER,x2);
      bbdn[x2]=iEnvelopesOnArray(RSIx,0,EnvPeriod,EnvMethod,0,EnvDeviation,MODE_LOWER,x2);
     }
   for(int x3=limit-2; x3>=0; x3--)
     {
      if(RSIx[x3+alertShift]<bbup[x3+alertShift] && RSIx[x3+alertShift+1]>bbup[x3+alertShift+1])
        {
         if(showArrows){ sell[x3]=RSIx[x3]; }
         if(showLine){ Lines(x3,"Sell",clrRed); }
        }
      if(RSIx[x3+alertShift]>bbdn[x3+alertShift] && RSIx[x3+alertShift+1]<bbdn[x3+alertShift+1])
        {
         if(showArrows){ buy[x3]=RSIx[x3]; }
         if(showLine){ Lines(x3,"Buy",clrBlue); }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void Lines(int shift,string txt,color clr=clrRed)
  {
   datetime time=iTime(Symbol(),0,shift);
   ObjectCreate(0,"Envfrs_"+txt+"_"+(string)time,OBJ_VLINE,0,time,0);
   ObjectSetInteger(0,"Envfrs_"+txt+"_"+(string)time,OBJPROP_COLOR,clr);
   ObjectSetInteger(0,"Envfrs_"+txt+"_"+(string)time,OBJPROP_STYLE,STYLE_DOT);
   ObjectSetString(0,"Envfrs_"+txt+"_"+(string)time,OBJPROP_TOOLTIP,txt);
   ObjectSetInteger(0,"Envfrs_"+txt+"_"+(string)time,OBJPROP_BACK,true);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int del(string name)
  {
   for(int n=ObjectsTotal()-1; n>=0; n--)
     {
      string Obj_Name=ObjectName(n);
      if(StringFind(Obj_Name,name,0)!=-1)
        {
         ObjectDelete(Obj_Name);
        }
     }
   return 0;
  }
//+------------------------------------------------------------------+

    
avatar

ssg

  • 23 мая 2020, 19:55
0
Эти стандартные индикаторы в тестере не зависимы друг от друга. У каждого свои буферы.
Это вы глазами видите изображение наложенных индикаторов.
А машина их не видит одновременно. Каждого по отдельности.
По этому нужен совместный индикатор с общими буферами стохастика и Envelopes.
Найдите в сети уже совмещенные эти индикаторы, может не стохастик, а рси или другой. Может быть с боленджнром или другим канальным, но что бы были общие буферы. Тогда обращаясь к этим буферам можно брать сигналы для торговли
avatar

ssg

  • 23 мая 2020, 19:48
0
Написать советник по этой стратегии Андрею заказал я в топике «Скрип для сбора статистики», так как Андрей не выполнил заказ по скрипту.
До этого несколько дней торговал по этой стратегии вручную.
Советник Андрея я переписал добавив все необходимый для реала проверки.
А на счет проверки на демосчете.
Сколько у вас уйдет времени для получения адекватного результата на демосчете?
6 месяцев?12? За один день прогона «попав в струю» можно сделать далеко не верные выводы.
Тестер на пятерке проведет адекватный анализ по десятку пар за полтора-два года за минуту. Оптимизировать всего то один параметр — шаг усреднения!
Как раз 19 и 20 годы очень подходят. И тренды затяжные и болтанка невообразимая. Очень сложный период для любого советника.
Вы наверное не обратили внимание на упоминание тестера на пятерке.
А на четверке я и сам давно уже его написал.Даже в двух вариантах.
Один на функциях Андрея, второй использует библиотеки
<code>#include <stdlib.mqh>                  // Стандартная библиотека
#include <b-Positions.mqh>                  // Стандартная библиотека</code>


Вот вы готовы стать поручителем, если пока у вас нет идей, а лимит за май не исчерпан?
Если не готовы, то может кто то другой сможет.А нет так в июне сам закажу.Просто на сегодня к пятерке не готов.
avatar

ssg

  • 23 мая 2020, 18:42
0
Или может где нибудь потом будешь использовать;) 
avatar

ssg

  • 22 мая 2020, 19:01
0
Хочешь сам допиши для стоповых ордеров по аналогии с лимитными

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 0;        // стоп лосс
extern int TakeProfit    = 0;        // тейк профит
extern double Profit     = 100;      // общая прибыль
extern double Loss       = 100;      // общий убыток
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 0;        // пункты БУ
extern int TrailingStop  = 0;        // трал
extern bool Usredn       = 1;        // 1-использовать усреднение 0-не использовать
extern int Step          = 50;       // шаг усреднения
extern int Count         = 5;        // число ордеров
extern bool Buy          = 1;        //1-выстовить бай 0-не выставлять
extern bool Buystop      = 1;        //1-выстовить байстоп 0-не выставлять
extern int Step_stop     = 50;       // дистанция для стопордера
extern int Count_bs      = 5;        // число ордеров байстоп
extern bool Buylimit     = 1;        //1-выстовить байлимит 0-не выставлять
extern int Step_limit    = 50;       // дистанция для лимитордера
extern int Count_bl      = 5;        // число ордеров байлимт
extern bool Sell         = 1;        //1-выстовить селл 0-не выставлять
extern bool Sellstop     = 1;        //1-выстовить селлстоп 0-не выставлять
extern int Count_ss      = 5;        // число ордеров селлстоп
extern bool Selllimit    = 1;        //1-выстовить селлимит 0-не выставлять
extern int Count_sl      = 5;        // число ордеров селллимит
extern int Expiration    = 5;        // истечение
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int CloseSig      = 0;        // 1-закрытие по сигналу 0-нет
extern int TaimOut       = 1;        // тайм аут ордера
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

extern int MAPeriod      = 240;      // период МА
extern int EPeriod       = 240;
extern int Method        = 0;
extern int Price1        = 0;
extern int Shift         = 0;
extern double Dev        = 0.3;

datetime TimeBar;


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int i;
   double price=0;
   
   double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift);
   double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1);
   double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1);
   
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();
   if(AllProfit()>Profit && Profit>0) CloseAll();
   if(AllProfit()<-Loss && Loss>0) CloseAll();

//---  стоповые в обратную сторону первой позиции  
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {
      if(Ask<EDN) 
        {
         if(Buy)PutOrder(0,Ask); TimeBar=Time[0]+Period()*TaimOut*60;
         if(Buylimit)
          {
           for (i=0; i<Count_bl; i++)
             {
               price=NormalizeDouble(Ask-Step_limit*(i+1)*Point,Digits); 
               PutOrder(2,price);         
             }
           }  
          if(Sellstop) PutOrder(5,Bid-Step_stop*_Point);
        }
      
      if(Bid>EUP)
        {
          if(Sell)PutOrder(1,Bid); TimeBar=Time[0]+Period()*TaimOut*60;
          if(Selllimit)
          {
           for (i=0; i<Count_sl; i++)
             {
               price=NormalizeDouble(Bid+Step_limit*(i+1)*Point,Digits);    
               PutOrder(3,price);
             }
           }
          if(Buystop) PutOrder(4,Ask+Step_stop*_Point);
        }    
     }
//--- 
 if(Usredn)
  {
   if(CountTrades()>0 && CountTrades()<Count)
     {
      if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask);  
      if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid); 
     }
  }
   if(CloseSig>0)
     {
      if(Bid>ma) CloseAll(0);
      if(Ask<ma)  CloseAll(1);
     }

   Comment("\n Lot: ",Lot(),
           "\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+
avatar

ssg

  • 22 мая 2020, 18:57