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

 
AlexeyVik:


А этот код

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

а потом в start()

Спасибо за науку.Тем не менее вопрос остается открытым.Мне нужно чтобы бай стоп тралился(модифицировался) по фракталам за ценой пока не сработает,и селлстоп таким же макаром.
 
xant:
Вопрос снимаю, сам разобрался
Не стоит декомпилом пользоваться. Советую полностью код переработать
 
Petiyashaket:
Спасибо за науку.Тем не менее вопрос остается открытым.Мне нужно чтобы бай стоп тралился(модифицировался) по фракталам за ценой пока не сработает,и селлстоп таким же макаром.

Так а на вопрос-то в твоём коде, выделенный красным

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);
          }
        } // это пара к той...
     
       }  

так и не ответил. А от этого и результат выполнения кода будет другим.

 
AlexeyVik:

Так а на вопрос-то в твоём коде, выделенный красным

так и не ответил. А от этого и результат выполнения кода будет другим.

Зачем Вы используете в условии Volume[0]<2 ?

Иногда за один тик их приходит пачка. И на этом баре условие уже не сработает 

 
Vinin:

Зачем Вы используете в условии Volume[0]<2 ?

Иногда за один тик их приходит пачка. И на этом баре условие уже не сработает 

Виктор, это вопрос не ко мне. Я пользуюсь такой функцией

bool NewBar()
{
   static datetime lastbar = iTime(_Symbol, PERIOD_H1, 0); // Период можно менять по желанию
   datetime curbar = iTime(_Symbol, PERIOD_H1, 0);         // и будет отсчитывать новый бар заданного периода на любом ТФ
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}//******************************************************************|

Я скопировал кусок кода для того чтобы задать вопрос о скобках.

 
Vinin:

Зачем Вы используете в условии Volume[0]<2 ?

Иногда за один тик их приходит пачка. И на этом баре условие уже не сработает 

Так учит Олег Ремизов на ютюбе, это условие ограничивает торговлю на новостях и отлов лосей :)
 
Petiyashaket:
Так учит Олег Ремизов на ютюбе, это условие ограничивает торговлю на новостях и отлов лосей :)
Ничего про Ремизова сказать не хочу. Но не обижайтесь, если Ваш код будет пропускать бары. Ладно, если минутки (на какой поставите конечно таймфрейм), но если будете гонять на часовиках и старше - останется только Вам посочувствовать
 
AlexeyVik:

Так а на вопрос-то в твоём коде, выделенный красным

так и не ответил. А от этого и результат выполнения кода будет другим.

поэкспериментировал со скобками повсякому,и удалил и добавил, результат прежний
 
Petiyashaket:
поэкспериментировал со скобками повсякому,и удалил и добавил, результат прежний

Да экспериментировать-то не надо, надо чётко понимать значение этих скобок и как их применять. Об этом написано в документации, читать лекцию не буду.

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);
          }
        } // это пара к той...
     
       }  
Но это только часть кода. Дальше есть аналогичная непонятка.
 
//+------------------------------------------------------------------+
//|                                                   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)
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);
 //----   
    for (int pos=0;pos==OrdersTotal();pos++)
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),High[3]+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);
    for (pos=0;pos==OrdersTotal();pos++)
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
          {
          OrderModify(OrderTicket(),Low[3]-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);
  }
//+------------------------------------------------------------------+
вот точная копия,не понимаю только счетчик for, потому что скопировал его с траллинг стопа ,поэтому и стоплосс прикрутить не могу к фракталам-потому что не умею их искать.короче все упирается в цикл.Вот если обьясните мне его в строке кода да с комментариями как у меня в предыдущем коде ,буду премного благодарен.
Причина обращения: