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

 
Stereosin:
Всем доброго времени суток. Суть - для каждого открытого рыночного ордера (имеются тэйк профиты и стоплоссы) выставляется отложенный в противоположном направлении при срабатывании стоплосса( если ордер buy, то отложенный send). Никак не соображу последовательность синтаксиса, что бы написать скрипт удаляющий отложенные ордера при закрытии текущего по тэйк профиту ? Может уже есть написанный скрипт среди бесплатных, но поиск безуспешен ( . Хочу сам написать, что бы в этом разбираться, но не могу понять последовательность синтаксиса. Поясню на другом примере - я хочу мороженное - последовательность синтаксиса - 1) - оторваться от дивана 2) Одеться 3) Дойти до магазина 4) Купить мороженное. Можно ли расписать так же для моей задачи?

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

примерно как-то так(тут наоборот, удаляются отложники, если выставленный ранее бай закрылся по профиту): 

 for(int m=OrdersTotal()-1;m>=0;m--)
   if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES)) 
     if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) {  
    
      if(OrderType()==OP_BUY)  sBuy++; 
      if(OrderType()==OP_SELL) sSell++;
       
      if(OrderType()==OP_BUYLIMIT)
       if(sBuy==0 || sSell>0) OrderDelete(OrderTicket());
      if(OrderType()==OP_SELLLIMIT) 
       if(sSell==0 || sBuy>0) OrderDelete(OrderTicket());
  }
 
Ratmirf:

То есть вот так получается правильно?

 if (OrderOpenTime()+7200+15*60 <=TimeCurrent()) Cls_Buy=true;

 if (OrderOpenTime()+7200+900 <=TimeCurrent()) Cls_Buy=true;

и в итоге вот так? 

 if (OrderOpenTime()+8100 <=TimeCurrent())      Cls_Buy=true;

Ну это-же математика средней школы... Будь немножко поуверенней в себе.
 
harbor:

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

примерно как-то так(тут наоборот, удаляются отложники, если выставленный ранее бай закрылся по профиту): 

Большое вам спасибо. Вечером сегодня буду разбираться.
 

смотрите, попал на проблему смысл которой не очень пойму. смысл кода - при определенном сигнале открыть ордер , у которого стоплос может быть меньше стоплевела. если такое происходит - стоплос увеличиваю до нужного размера. тп при открытии не выставляю, оставляю его виртуальным в программе и открываю ордер. в результате открывается только один из 15 - 20.  что нужно сделать чтобы открывался каждый ордер?  код :

RefreshRates();


     double bid = MarketInfo(symbol,MODE_BID);
     double ask = MarketInfo(symbol,MODE_ASK);

    

     double stoplevel =  NormalizeDouble(stoplevelTemp * tickTemp,digitsTemp)+tickTemp;

     if(digitsTemp == 5 )
          stoplevel+=(700 * tickTemp);
     
     if(spreadOrdDangBr < stoplevel)                                                                           //если спред меньше стоплевела - перебиваем
         spreadOrdDangBr=stoplevel;
         
     double lotDB = calculationLot(spreadOrdDangBr,0.0025);                                                      //расчитываем лот - четверть процента свободных денег
     


         slODB=ask-spreadOrdDangBr;                                                                              
         tpODB= ask+ spreadOrdDangBr;

         orderTicketODB=OrderSend(symbol,OP_BUY,lotDB,ask,3,slODB,0,("dangBr" +spreadOrdDangBr));



и в результате в терминале


 
Привет всем) как  определить максимальную цену выбранного бара ( например сотого ) 
 

Помогите, пожалуйста! Хочу чтобы после открытия например Buy, при повышении цены например на 100
пунктов, стоп лосс становился равным нулю, относительно предыдущего стоп лосса.

Правильно ли я делаю: 


if(Bid-OrderOpenPrice()>Point*100

 {

OrderModify(OrderTicket(),OrderOpenPrice(), 0,TakeProfit,0,);

return(0);

 

Спасибо! 

 
Tema97:
Привет всем) как  определить максимальную цену выбранного бара ( например сотого ) 
High[100] не поможет
 

Нашел функцию - определяет максимальную и минимальную цену за 100 баров и рисует горизонтальные линии ( помогите сделать что бы первые например 15 баров пропускало и только потом 100 проверяло ( как такой сдвиг сделать? и еще  проблема с линиями - рисует только 1 раз - то есть - если мы пройдем еще 100 пунктов с новыми максимумами и минимумами - линии не нарисуются ) кто знает отпишите плиз -  вот сам код 

extern int Quant_Bars=100;                       // Количество баров

//--------------------------------------------------------------------

int start()                                     // Спец. функция start

  {

   int i;                                       // Номер бара 

   double Minimum=Bid,                          // Минимальная цена

          Maximum=Bid;                          // Максимальная цена

 

   for(i=0;i<=Quant_Bars-1;i++)                 // От нуля (!) до..

     {                                          // ..Quant_Bars-1 (!)

      if (Low[i]< Minimum)                      // Если < известного

         Minimum=Low[i];                        // то оно и будет мин

      if (High[i]> Maximum)                     // Если > известного

         Maximum=High[i];                       // то оно и будет макс

     }

   Alert("За последние ",Quant_Bars,            // Вывод на экран  

         " баров Min= ",Minimum," Max= ",Maximum);

  

  double linia1=ObjectCreate("highLine",OBJ_HLINE,0,0,Maximum);

 double linia2= ObjectCreate("lowLine",OBJ_HLINE,0,0,Minimum);

  

 

  

   return(0);                                      // Выход из start()

  } 

 
Tema почитай наконец-то документацию. Там так много интересного можно найти... Например  iHighest возвращает индекс наибольшего найденного значения (смещение относительно текущего бара) соответствующего графика. А  iHigh возвращает значение максимальной цены бара (указанного параметром shift) соответствующего графика. Поняв эти две функции сможешь с лёгкостью решить свою проблему не прибегая к чужим не всегда качественно написанным функциям.
 
Ребяты подскажите, если индикатор рисует нестандартные графические объекты, то можно ли к ним получить доступ? Проблема в том что они не отображаются в списке объектов (с нажатой кнопкой Все), и функция ObjectsTotal() их не видит. При попытке обратиться к объектам по их имени GetLastError() возвращает ошибку 4202 (функция ObjectFind())
Причина обращения: