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

 
culler:

Помогите решить задачку на определение момента пересечения двух МА линий.

Никак не могу сообразить как описать это.

есть MAfast и MAslow

double MAfast=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,1);

double MAslow=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1);

когда ставлю if(MAfast>MAslow) оно работает до тех пор когда действительно MAfast находится с низу, когда пересекает то ловится момент пересечения а дальше MAfast находится с верху и ордера дальше шлепаются на BUY )))

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

А то в моем коде там просто больше или меньше, выходит. Отсюда и косяки.

if ((x1 - y1)*(x2 - y2) < 0)
{
// имеем пересечение
}
 
culler:

Помогите решить задачку на определение момента пересечения двух МА линий.

Никак не могу сообразить как описать это.

есть MAfast и MAslow

double MAfast=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,1);

double MAslow=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1);

когда ставлю if(MAfast>MAslow) оно работает до тех пор когда действительно MAfast находится с низу, когда пересекает то ловится момент пересечения а дальше MAfast находится с верху и ордера дальше шлепаются на BUY )))

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

А то в моем коде там просто больше или меньше, выходит. Отсюда и косяки.

Здесь вас ожидает много интересного.
 
artmedia70:
if ((x1 - y1)*(x2 - y2) < 0)
{
// имеем пересечение
}


TarasBY:
Здесь вас ожидает много интересного.

Спасибо. Спасибо.
 
culler:

Помогите решить задачку на определение момента пересечения двух МА линий.

Никак не могу сообразить как описать это.

есть MAfast и MAslow

double MAfast=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,1);

double MAslow=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,1);

когда ставлю if(MAfast>MAslow) оно работает до тех пор когда действительно MAfast находится с низу, когда пересекает то ловится момент пересечения а дальше MAfast находится с верху и ордера дальше шлепаются на BUY )))

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

А то в моем коде там просто больше или меньше, выходит. Отсюда и косяки.


Очень полезная ветка, и по вашему вопросу!
 
В документации написано:

bool WindowIsVisible( int index)
Возвращает TRUE, если подокно графика видимо, иначе возвращает FALSE. Подокно графика может быть скрыто из-за свойств видимости помещенного в него индикатора.
Параметры:
index - Индекс подокна графика.
Пример:
  int maywin=WindowFind("MyMACD");
  if(maywin>-1 && WindowIsVisible(maywin)==true)
    Print("окно MyMACD видимое");
  else
    Print("окно MyMACD не обнаружено или не видимое");

Объясните пожалуйста, что означает : "Подокно графика может быть скрыто из-за свойств видимости помещенного в него индикатора. "??? Это что за свойство индикатора????
 

Разве стоплевел возвращает не инт?

Компилятор выдаёт предупреждение "possible loss of data due to type conversion " на такой код:

   int slevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
да и на 
   int digits = MarketInfo( Symbol(), MODE_DIGITS);
тоже
 

Требуется помощь не закрывается часть позиции при тестированиии советника

void Zacritie_poz_sell ()
{
 
 int    i, k=OrdersTotal();
 string sy=Symbol();
 
for (i=0; i<k; i++) 
{
 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
 {
  if ( OrderSymbol() == sy)
   {
    if (OrderType()==OP_SELL)
     {
       if ( OrderMagicNumber()==Magic)
       {
        double TP = OrderTakeProfit();
        double Prise = OrderOpenPrice();
        double Close_poz = NormalizeDouble( Prise-(Prise-TP)/2,Digits);
        double Lots1 = NormalizeDouble (Lots/4,Digits);
        double TP1 = OrderTakeProfit()+1*Point;
        double SL = OrderOpenPrice()-20*Point;
         if ( Bid == Close_poz && OrderStopLoss() != SL && TP == TP1 && Lots != Lots1)
         {
          
           OrderClose(OrderTicket(),Lots1, Bid, 40*Point, Yellow);

           break;
           Sleep (1000*5);
           RefreshRates();
         
          
         }
         
       }
     }
  
    }
   }
 }
}
 
miha91:

Требуется помощь не закрывается часть позиции при тестированиии советника


for (i=k-1; i>=0; i--)
 
evillive:

Разве стоплевел возвращает не инт?

Компилятор выдаёт предупреждение "possible loss of data due to type conversion " на такой код:

Явное преобразование:

int slevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL);
Видишь ли... Функция имеет тип double, а вот идентификатор запроса может определять тип возвращаемой информации int. Потому и матерится.
 

Оптимизирую советника, переборов очень много, порядка 10^17 степени, есть еще параметры, но их уже нельзя оптимизировать. Почему такие ограничения???

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

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