[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 598

 
alsu:

Разберите полностью логику работы индикатора.

Замените для начала

на

Кроме того,

Без else выполняется сначала первый блок, потом второй. С else - либо первый, либо второй.



ооо! судя по логике не хватает else!) скоро поменяю! да, и еще сходу: если я пишу в тексте везде не с 4й а с 3й, вот так:
iFractals(Symbol(),PERIOD_H1,MODE_UPPER,3);

то у меня сделки не совершаются, хотя баров до 3го вроде бы хватает для того чтобы сработало все, в чем тут дело?

а насчет логики работы индикатора я чутка не понял сути задачи. Я то знаю как работает индикатор, просто мне нужно о алгоритму чтобы ifractals не был равен нулю, а вы мне предлагаете убрать это условие, оно лишнее? всм. я его прописываю дважды? почему его нужно убрать?

 
alsu:

Разберите полностью логику работы индикатора.

Замените для начала

на

Кроме того,

Без else выполняется сначала первый блок, потом второй. С else - либо первый, либо второй.



вообщем все заменил но все равно пропускает точно так же почему то...((((((
 
Vinin:

Бороться можно, и работу советника можно прерывать. Подход просто надо сменить.


Каким образом?

В начале кода перебрать все открытые ордера, найти и присвоить значения ticket-ов ордеров или можно как то по другому?

 
Cruc:


В начале кода перебрать все открытые ордера, найти и присвоить значения ticket-ов ордеров или можно как то по другому?


Можно и так, если конечно советник открывает одну-две позиции.
 
кто знает из-за чего в тестере советник перестает работать?
 
Vinin:

Можно и так, если конечно советник открывает одну-две позиции.

Советник мультивалютный, поэтому казалось бы простые операции не всегда получается сразу разрешить ((. И опыта нет.
 
Cruc:

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


Просто надо делать корректный учет ордеров. Примеров масса.

А опыт. Опыт - дело наживное, придет. Никуда не денется

 
Vinin:


Просто надо делать корректный учет ордеров. Примеров масса.

А опыт. Опыт - дело наживное, придет. Никуда не денется


Спасибо за ответы, буду рыться в архивах.
 
skyjet:

Добрый вечер! Прошу помощи с мультивалютным советником по MACD. Советник правильно следует кретериям открытия позиций, но закрытие "по условию" не работает. Я конечно начал использовать трейлинг-стоп, но правильное закрытие не дает мне покоя.

Так выглядит оснавная часть

А это блок закрытия. Пожалуйста, помогите найти ошибку!


Извините, что повторяюсь, но сколько не бьюсь - не нахожу ошибки!

//+------------------------------------------------------------------+
string lSymbol;
int init ()
{ 
 lSymbol = Symbol();
 return (0);
}
int deinit()
{return(0);}
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   double bid, ask, point, digits;
   int cnt, ticket, total;
   
  total = SymbolOrdersTotal (lSymbol);
  
  if (total<1);
  {
    bid   = MarketInfo(lSymbol,MODE_BID);
    ask   = MarketInfo(lSymbol,MODE_ASK);
    point = MarketInfo(lSymbol,MODE_POINT);
    digits= MarketInfo(lSymbol,MODE_DIGITS);



Так выглядит оснавная часть, а это злопалучный блок закрытия



 for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==lSymbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*point))
                {
                 OrderClose(OrderTicket(),OrderLots(),bid,3,Violet); // close position
                 return(0); // exit
                }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if(bid-OrderOpenPrice()>point*TrailingStop)
                 {
                  if(OrderStopLoss()<bid-point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),bid-point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*point))
              {
               OrderClose(OrderTicket(),OrderLots(),ask,3,Violet); // close position
               return(0); // exit
              }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-ask)>(point*TrailingStop))
                 {
                  if((OrderStopLoss()>(ask+point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),ask+point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                }
              }
           }
        }
     }
   return(0);
  }
  
   
  int SymbolOrdersTotal(string lSymbol)
{
   int Res=0;
   int total=OrdersTotal();
   for (int i=0;i<total;i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS))
      {
         if (OrderSymbol()==lSymbol)
         {
            Res++;
         }
      }
   }
   return(Res);
}
// the end.
 
Qwertee:
вообщем все заменил но все равно пропускает точно так же почему то...((((((
пишите, что получилось, и какие сообщения принтом выводите в лог
Причина обращения: