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

 

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

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}
 
Pomid:

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

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}

 А почему бы к Автору не обратиться?! Он ещё живой и молодой, не старый! Координаты в коде над каждой функцией! Все его знают и уважают! 

И научитесь вставлять код вот так, с SRC!

void SetOrders() {

  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double PredBar=iClose(NULL,PERIOD_M5,1);
  double pAsk=PredBar+(DistanceSet+spr)*Point;
  double pBid=PredBar-(DistanceSet+spr)*Point;

  if (!ExistOrder(1)) {
    if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
    if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
    SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
  }
  if (!ExistOrder(2)) {
    if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
    if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
    SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
  }
}

 C PredBar'ом побаловались без понимания, вот и результат! Сначала мат. часть учите!  

 
Добрый вечер! Подскажите, пожалуйста, как решить проблему с неработающим на новом билде индикаторе. При компиляции выдает ошибку 'TotalOrders' - illegal switch expression type коде ошибка выделена).  С уважением, Александр.
 for (i=0; i<k; i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    {
      if ((OrderSymbol()==Symb) && (OrderType()==op))
        {
            ko++;
            TotalOrders[ChartListPosition+1][ko][1]=NormalizeDouble(OrderOpenPrice(),dig);
            TotalOrders[ChartListPosition+1][ko][2]=NormalizeDouble(OrderStopLoss(),dig);
            TotalOrders[ChartListPosition+1][ko][3]=NormalizeDouble(OrderTakeProfit(),dig);
            TotalOrders[ChartListPosition+1][ko][4]=OrderTicket();
            TotalOrders[ChartListPosition+1][ko][5]=OrderLots();
            TotalOrders[ChartListPosition+1][ko][6]=OrderType();
            TotalOrders[ChartListPosition+1][ko][7]=OrderMagicNumber();
            TotalOrders[ChartListPosition+1][0][0]=ko;
           
              switch(TotalOrders[ChartListPosition+1][ko][6])
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";

 for(int j=1;j<=OrdersCount;j++)  
      {
       
         switch(TotalOrders[ChartsListPosition+1][j][6])
          {
           case OP_SELL: 
               if (TotalOrders[ChartsListPosition+1][j][2]!=0 && 
                   ask>=(TotalOrders[ChartsListPosition+1][j][2]-NormalizeDouble(StopLevel*point,dig)))  
                   {
                    test=StopLossColor;
                   } 
                   else
                   {
                   if (TotalOrders[ChartsListPosition+1][j][3]!=0 && 
                       ask<=(TotalOrders[ChartsListPosition+1][j][3]+NormalizeDouble(StopLevel*point,dig)))
                      {
                       test=TakeProfitColor;
                      }
                   }
             break;       
 
karwin:
Добрый вечер! Подскажите, пожалуйста, как решить проблему с неработающим на новом билде индикаторе. При компиляции выдает ошибку 'TotalOrders' - illegal switch expression type (в коде ошибка выделена).  С уважением, Александр.

Переменная там должна быть, а не что-то еще: 

              int Переменная=TotalOrders[ChartListPosition+1][ko][6];
              switch(Переменная)
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";
 

Здравствуйте товарищи.

Подскажите, с МТ5 я не очень знаком, почти не пользовался, при тестировании задействовано только одно ядро процессора, у меня их 8, почему так? Как это исправить?


 
7Konstantin7:

Здравствуйте товарищи.

Подскажите, с МТ5 я не очень знаком, почти не пользовался, при тестировании задействовано только одно ядро процессора, у меня их 8, почему так? Как это исправить?


а это на пятом форуме спрашивать надо
 
7Konstantin7:

Здравствуйте товарищи.

Подскажите, с МТ5 я не очень знаком, почти не пользовался, при тестировании задействовано только одно ядро процессора, у меня их 8, почему так? Как это исправить?


Так при тестировании или при оптимизации? Если просто тестирование - работает одно ядро, а вот при включении опции "Оптимизация" в тестере стратегий, будут работать все ядра процессора.
 
borilunad:

 C PredBar'ом побаловались без понимания, вот и результат! Сначала мат. часть учите!  

Cпасибо, выучил, исправил.
 
evillive:
а это на пятом форуме спрашивать надо

"Жизнь" как не крути а выкуривают на МТ5, скоро и на сайт выкурят, я там не сижу совсем потому задал вопрос тут.

barabashkakvn:
Так при тестировании или при оптимизации? Если просто тестирование - работает одно ядро, а вот при включении опции "Оптимизация" в тестере стратегий, будут работать все ядра процессора.

Разобрался всем спасибо, при тестировании работает одно ядро, в общем все работает как и должно быть,

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

 
7Konstantin7:

"Жизнь" как не крути а выкуривают на МТ5, скоро и на сайт выкурят, я там не сижу совсем потому задал вопрос тут.

Разобрался всем спасибо, при тестировании работает одно ядро, в общем все работает как и должно быть,

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

А зачем при тестировании (без включённой оптимизации) грузить все ядра? Ведь если тестирование с визуализацией, то здесь спешить не куда, а если тестирование без визуализации - так современные компьютеры такую задачу щёлкают как семечки и на одном ядре.
Причина обращения: