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

 
Zver4991:

а от чего зависит качество тестирования и как его повысить к максимальному?

Посмотри на этом сайте,как протестировать советника с 99% качеством моделирования

http://tradelikeapro.ru/kak-poluchit-kachestvo-modelirovaniya-99/

 
Zhunko:
Это для типа BOOL так. Т.е. для bool из старой версии MQL4. Для однобайтового bool это не так. При значении более нуля случится переполнение.

Интересно, тогда почему

   bool b=2;

компилирует без ошибок и предупреждений?

 
artmedia70:

Интересно, тогда почему

bool b=2;
компилирует без ошибок и предупреждений?

Наверно, оператор присвоения перегружен для типа bool. Он отслеживает переполнение и, если больше, чем 1, то присваивает и возвращает true.

В студии на уровне предупреждений 4 часто появляются предупреждения, когда пытаешься какой-нибудь нелогический тип вставить в логическое выражение. Или наоборот, когда логический тип применяешь в арифметических операциях.

 
Zhunko:

Наверно, оператор присвоения перегружен для типа bool. Он отслеживает переполнение и, если больше, чем 1, то присваивает и возвращает true.

В студии на уровне предупреждений 4 часто появляются предупреждения, когда пытаешься какой-нибудь нелогический тип вставить в логическое выражение. Или наоборот, когда логический тип применяешь в арифметических операциях.

Логичнее было бы при

#property strict

выдать предупреждение, а без - оставить как в старой версии

 
artmedia70:

не совсем так, но суть верна.

А вообще-то: ноль соответствует false, а любое другое, отличное от ноля значение соответствует true

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

Ну не программист я всё же...

Есть счёт №1 - пятизнак с мин.лот 0,01 и шагом 0,01 (билд 584); счёт №2 - 4-х знак с мин.лот 0,1 и шагом лота 0,1 (билд 584) и счёт №3, точно такоё же как и №2, только терминал билд 509.

И есть трал стоплосса:

void manageStops()
{ 
   string trailSymbol=Symbol();  
   for( int i = OrdersTotal()-1; i >=0 ; i-- ) 
   {
      if ( OrderSelect( i, SELECT_BY_POS ) == true ) 
      {  
         int trailOrderType = OrderType(); 
         if( OrderSymbol() != trailSymbol || trailOrderType > 1 || OrderProfit() < 0 ) continue; 
         double trailStopLoss = OrderStopLoss();   
         while( true ) {
            double trailStop = TrailingStop; 
            int trailDistance = MarketInfo( trailSymbol, MODE_STOPLEVEL ); 
            if( trailStop < trailDistance ) trailStop = trailStop+trailDistance;  
            bool modifyTrailingStop = false;  
            switch( trailOrderType ) 
            {
               case 0 : 
                  if(trailStopLoss < (Bid - (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Bid - TrailingStop * pipPoints,digits);   
                     modifyTrailingStop = true;       
                  }
                  break;    
               case 1 :                      
                  if(trailStopLoss > (Ask + (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Ask + TrailingStop * pipPoints,digits);             
                     modifyTrailingStop = true;             
                  }
               }                               
            if( modifyTrailingStop == false ) break;                       
            double trailTakeProfit = OrderTakeProfit(); 
            double trailPrice = OrderOpenPrice();  
            int trailTicket = OrderTicket();   
            if( ( OrderType() == OP_BUY && trailStopLoss > trailPrice && trailStopLoss < OrderOpenPrice() + ( MaxStop * pipPoints ) ) 
                  || ( OrderType() == OP_SELL && trailStopLoss < trailPrice && trailStopLoss > OrderOpenPrice() - ( MaxStop * pipPoints ) ) )

            OrderModify( trailTicket, trailPrice, trailStopLoss, trailTakeProfit,0);
            break; 
           } 
        }  
     }  
  return;   
} 

Почему на счёте №1 стоплосс тралится нормально, а на счетах №2 и 3 "еррор 130"??? Логика хоть и с подвывертом, но ведь в одном случае работает...

 
evillive:

Ну не программист я всё же...

Есть счёт №1 - пятизнак с мин.лот 0,01 и шагом 0,01 (билд 584); счёт №2 - 4-х знак с мин.лот 0,1 и шагом лота 0,1 (билд 584) и счёт №3, точно такоё же как и №2, только терминал билд 509.

И есть трал стоплосса:

Почему на счёте №1 стоплосс тралится нормально, а на счетах №2 и 3 "еррор 130"??? Логика хоть и с подвывертом, но ведь в одном случае работает...


Из самого вопроса вытекает что проблема в том 5-ти значный или 4-х значный счет. Смотрю в код. Где определена переменная pipPoint и чему она равна? Скорее всего проблема кроется именно там.
 
pro_:

Из самого вопроса вытекает что проблема в том 5-ти значный или 4-х значный счет. Смотрю в код. Где определена переменная pipPoints и чему она равна? Скорее всего проблема кроется именно там.

В ините определяю pipPoints = MarketInfo( Symbol(), MODE_POINT);

Увеличил значение MaxStop, вроде трал должен с бОльшим шагом меняться, но он с шагом в 1 пункт меняется, но хоть стал тралить и на 4-знаке... Придётся всё же логику переделывать, нужен настраиваемый шаг.

 
smdm:

Здравствуйте!

Вопрос следующий. Есть индикатор Heiken Ashi Smoothed https://www.mql5.com/ru/code/7930

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

Спасибо.


На подобный вопрос -как отразить индикатор с недельного на график Н4. я долбил уже на нескольких форумах . и здесь тоже но ни чего не добился и не нашел . лучшего чем прописать размер старшего ТФ-ма в коде для меньшего ни кто не подсказывает. хотя если ваш индикатор имеет простую логистику и берет для своего подсчета простые вычисления по барам то это возможно . если можете текстовый код и скрин на н1 в студию со своими пояснениями .
 

и так индикатор должен рисовать верт линию на том баре на котором цена закроется в середине бара.....

double close_price(int nomer_bara)
{
if(nomer_bara<1)
{
Alert("нельзя анализировать текущий бар");
}
else
{
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3)//возвращает 1/3 если цена текущего бара закрылась ниже 1/3 его спреда 
{
return(1/3);
}
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3&&(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)*2)/3)//возвращает 2/3 если цена текущего бара закрылась ниже 2/3 и выше 1/3 его спреда 
{
return(2/3);
}

if((iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>(iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))*2)/3&&iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))//возвращает 1 если цена текущего бара закрылась выше 2/3 его спреда
{
return(1);
}
}

}

 if(close_price(1)==1/3)// в случае если цена закрылась внизу то нарисовать линию на этом баре
   {
 SetVLine(Red, "", Time[1], STYLE_SOLID, 2);
   }
и так вся проблема заключается в том что линия рисуется на каждом баре не пойму какого черта... помогите пожалуйста

Причина обращения: