помогите мне пожалуйста [решено] - страница 2

 
ПОКАЖИТЕ КОД.
 

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }
Я удалил все остальные функции, которые я не использую, весь мой код состоит только из этого
Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

Ваша двойная декларация билета.

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

Объявление ticket скрывает ... бла бла бла ? Видите, я человек-компилятор.

Удалите второй int.

 
mrluck1:

Я поставил

bool заказ и

int ticket

на глобальные переменные, а остальной код на OnTick, но все равно теперь не делает никаких записей.

Не скомпилировано, не проверено

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Марко: Я удалил дублированный int, но теперь торговля не производится, мне нужна 1 сделка, если цена> облако ихмоку, этот код сначала был замечательным, но он продолжал создавать новые сделки, если

цена была выше облака, мне просто нужна помощь, чтобы написать код таким образом, чтобы скрипт остановился после 1 сделки.

Honest Knave: Я попробовал ваш код, я просто определил magic_no, которого не хватало, он работает отлично, он ждет новой сделки, когда цена снова коснется облака, это действительно будет полезно для следующих проектов, но

мне просто нужно, чтобы он останавливался после 1º сделки, что мне делать?

Спасибо всем за помощь

 
bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

Вот в чем проблема.

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket>-1)
        {
         order=1;
        }
      }
    }
  }


Попробуйте это, и я указал на это несколько сообщений назад.

Marco vd Heijden:

Также обратите внимание, что OrderSend либо возвращает номер билета, либо -1 минус один, если он не работает.

См.
 
mrluck1:

Honest Knave: Я попробовал ваш код, я просто определил magic_no, которого не хватало, он работает отлично, он ждет новой сделки, если цена снова коснется облака, это действительно будет полезно для следующих проектов, но

мне просто нужно, чтобы он останавливался после 1 сделки, что мне делать?

Спасибо всем за помощь

Он не должен торговать больше, чем 1...? Вот что это делает:

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Honest Knave:

Ваш советник великолепен, но он создает новые сделки, если цена снова опускается до облака Ишимоку, а затем возвращается вверх. Он не повторяет ордера на той же свече, как проблема, которая была у меня, и я многому научусь на этом примере, который вы мне дали, чтобы создавать новые сделки.

Но мне нужно, чтобы после первой сделки советник или скрипт сразу же закрывался, так что мне нужна только одна сделка.

Марко: Я попробовал ваше новое обновление, но оно не делает ни одной сделки, я ввел все так, как вы написали в последнем сообщении, только удалил второй int, в тикете. Но в тестере стратегий первая сделка так и не сделана, что теперь делать?

 
mrluck1:

Honest Knave:

Ваш советник великолепен, но он создает новые сделки, если цена снова опускается до облака Ишимоку, а затем возвращается вверх. Он не повторяет ордера на той же свече, как проблема, которая была у меня, и я многому научусь на этом примере, который вы мне дали, чтобы создавать новые сделки.

Но мне нужно, чтобы после первой сделки советник или скрипт сразу же закрывался, так что мне нужна только одна сделка.

Я не понимаю, что вы имеете в виду.

Этот код не может открыть более 1 ордера за раз.

Но если ордер закроется, и триггер произойдет снова, он откроет еще один.

Вы имеете в виду, что хотите, чтобы только одна сделка открывалась ЕЖЕДНЕВНО?

 
honest_knave:

Я не понимаю, что вы имеете в виду.

Этот код не может открыть более 1 ордера за раз.

Но если ордер закроется, и триггер произойдет снова, он откроет еще один.

То есть вы хотите, чтобы только одна сделка открывалась ЕЖЕДНЕВНО?

Да, сэр, только 1 сделка, но ваш пример был великолепен, он будет очень полезен как основа для создания новых восточных ордеров.
Причина обращения: