Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 747

 
TarasBY:

2) На одном баре не могут быть одновременно UPPER и LOWER фракталы, соответственно, проверка

относится к категории программистского идиотизма.

Ну значит такие котировки только для идиотов.


 
TarasBY:

2) На одном баре не могут быть одновременно UPPER и LOWER фракталы, соответственно, проверка

относится к категории программистского идиотизма.


На одном баре могут быть оба фрактала
 
Vinin:
На одном баре могут быть оба фрактала
он имел ввиду минутки, но забыл про месяцы
 
Здравствуйте

В коде есть такая строка 

 if (G_time_344 == Time[0]) return (0);
Как я понимаю, именно она ответственна за то, что советник задерживает пересчет до появления нового бара. Пока не сменилось время открытия нулевого бара - пересчет останавливается. 

Соответственно если я открою советник на минутках, он пересчитывает с каждой новой минутой. А если открт на Н4, то и пересчет будет каждые 4 часа. 

Как бы правильно написать эту строку, чтобы советник брал время открытия не текущего бара, то есть бара, на котором открыт терминал, а того, который я укажу в настройках? То есть я вешаю советника скажем на Н4, а он будет пересчитывать каждые 5 минут, потому что я так ему задал. Или каждую минуту. 


 
_new-rena:
он имел ввиду минутки, но забыл про месяцы

А чем минутки отличаются от месяцев???


 
evillive:
Жалуется-то на что в журнале при модификации? "Тупо открывает новые отложки" потому что ограничения нет никакого, зато есть OrderSend.
никаких ошибок,только желтые треугольники
 
AlexeyVik:

А чем минутки отличаются от месяцев???

согласен, и на М1 есть приятные моменты. но на месяцах на каждом баре так.
 
Вопрос снимаю, сам разобрался
 
TarasBY:

1) Любая стратегия должна быть определена на количество одновременно открытых ордеров. Соответственно, прежде чем открывать следующий ордер, нужно проверить сколько их уже открыто.

2) На одном баре не могут быть одновременно UPPER и LOWER фракталы, соответственно, проверка

относится к категории программистского идиотизма.

3) Прежде, чем писать условия возврата значений буферных индикаторов, нужно точно знать какое значение является для него "пустым"? Вы проверили, что 0?

4) Конструкция

хоть и будет работать (в большинстве случаев), но является как бы попроще назвать - неестественной, так как является "вольной придумкой" разработчика и для работы трейдера малоинформативна. Альтернатива - отслеживание нового бара.

5) Надо начинать с азов, так как это:

говорит о том, что совсем не понимаете, что пишите.

Лучший путь к пониманию - это изучение работы чужих кодов и их модификация в своих целях. Удачи.

выставляет то он их как раз как написано,пункт в пункт.Он их не модифицирует,о чем вы не сказали ни слова.Вот полный код:
//+------------------------------------------------------------------+
//|                                                   Strategy 3.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""
#include <Library1.mqh>
extern int Magic=111;
extern int TP=20;
extern int SL=30;
extern int Trall_dist=10;
extern int Shag=10;
extern bool Isp_shag=false;
extern bool Isp_bezubitok=false;
extern double Lot=0.1;
double SS=0,BS=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double tp,sl;
  if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);       //верхний фрактал,формируется на третьей свече
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);     //нижний фрактал,формируется на третьей свече                                                   
//----
  if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        {
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        }
     
       }   
   else if(Up==0&&Down>0&&Volume[0]<2)
    {
    if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
    else {SS=Low[3]-5*Point; Print("Виртуальный SS:",SS);}
         {
         for (pos=1;pos==OrdersTotal();pos++)
             {
             OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
             if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
               {
               OrderModify(OrderTicket(),Down-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
               } 
             }
         }
    
            
    if(OrdersTotal()>0)
    Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
    return(0);
  }}
//+------------------------------------------------------------------+
Пытаюсь писать  так как вычитал,подсмотрел,понял.Ваша критика напоминает учебник по MQL4- понятна только если кто то разжуёт.Это не так ,тут не то,еслибы было все то ябы сюда не писал.Обьясните лучше как правильно,желательно с разьяснениями на русском как у меня в коде на покупку:)
 
if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        { // К чему относится эта скобка???
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
       } // это пара к той...
      }
     


А этот код

if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака

лучше писать в init() и лучше не так

double   point; // на уровне глобальных переменных

int OnInit()
{
   point = Digits%2 == 0 ? _Point : _Point * 10;
}

а потом в start()

tp = High[3]+TP*point;
Причина обращения: