Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1583

 
Valeriy Yastremskiy:

Логика хромает, все есть, и массивы под тикеты и типы ордеров. Только он не заполняется при открытии ордеров почему то, а в функции ТикетЛимит вообще обнуляет массив. На первый наискосок взгляд.

Как в шахматах? Не хватает одного хода. Попробую осмыслить. Спасибо Валерий.

 

Подскажите, как правильно получить статистику по барам

Я сделал так, считает кол-во правильно, но при попытке использовать данные получаю "0"

//---
   int i,limit;
   datetime Start=0;
   if((rates_total-prev_calculated-1)<=0)return(0);
   limit=rates_total-prev_calculated-1;
   for(i=limit; i>=0; i--) 
     {
      Label1Buffer[i]=open[i];
      Label2Buffer[i]=close[i];
      if(Start!=time[i])
        {
         a+=1;                                        // кол-во баров
         if(Label1Buffer[i] <Label2Buffer[i]) u+=1;   // восходящие бары
         if(Label1Buffer[i] >Label2Buffer[i]) d+=1;   // нисходящие бары
         if(Label1Buffer[i]==Label2Buffer[i]) b+=1;   // Дожи
         Start=time[i];
        }
      if(Start==time[i]&&a<=limit)
        {
         Print(i," / ",u," / ",d," / ",b," / ",a," / ",limit);//
        }
      if(a==limit) 
        {
         ObjectCreate(0,"STAT1",OBJ_TEXT,0,time[0],high[0]+750*Point);
         ObjectSetText("STAT1",d,8,"Arial",clrBlack);
         ObjectCreate(0,"STAT2",OBJ_TEXT,0,time[0],low[0]-250*Point);
         ObjectSetText("STAT2",u,8,"Arial",clrBlack);
         Print(d/u);
        }
     }
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 0
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 1 / 3041 / 2971 / 41 / 6053 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 2 / 3041 / 2970 / 41 / 6052 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 3 / 3041 / 2969 / 41 / 6051 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 4 / 3041 / 2968 / 41 / 6050 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 5 / 3041 / 2967 / 41 / 6049 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 6 / 3041 / 2966 / 41 / 6048 / 6053

Возможно есть уже нормальный способ, а я "изобретаю велосипед")

Подскажите, пожалуйста.

 
MakarFX:

Подскажите, как правильно получить статистику по барам

Я сделал так, считает кол-во правильно, но при попытке использовать данные получаю "0"

Возможно есть уже нормальный способ, а я "изобретаю велосипед")

Подскажите, пожалуйста.

Похоже, что у вас все переменные int, а результат деления получается меньше 0. Поэтому, 0;

Попробуйте:

Print((double)d/u);
 
Galim_V:

Как в шахматах? Не хватает одного хода. Попробую осмыслить. Спасибо Валерий.

в глобальной области
int ind=0, Ind=0;
......

 if(ParSar>MaxClose&&chekt==1){

    ticket=_OrderSend(NULL,OP_BUYSTOP,0.01,MaxClose+(spread*Point()),0);
ind++;
_Tacket[ind]=ticket; Ind=ind;
  }
    }
    if(MinClose!=0){
   if(ParSar<MinClose&&chekt==1){
    _price= NormalizeDouble( MinClose-(spread*Point()),Digits);
    ticket=_OrderSend(NULL,OP_SELLSTOP,0.01,_price,0);
ind++;
_Tacket[ind]=ticket; Ind=ind;
........

for(i=Ind,i<1,Ind--) // вместо Ind OrderTotal правильнее, если есть и другие ордера в терминале
{OrderSelect( _Tacket[i], SELECT_BY_TICKET )
проверки и действия
}
// Здесь запомнить тикет в массив _тикет и тип ордера тоже и запомнить последний индекс массива!!!

 //А потом в Ордер селект подставлять значение массива _тикет) Цикл по индексу массива _тикет от 1 до последнего индекса.
 
Mihail Matkovskij:

Похоже, что у вас все переменные int, а результат деления получается меньше 0. Поэтому, 0;

Попробуйте:

Спасибо.
 
Ещё раз спасибо всем за помощь в моем предыдущем проекте

Тут появилась ещё одна идея следующего советника, может кто-то уже знаком  с стратегией  ORBO (open Range Brake out)? 

 

Подскажите, пожалуйста, есть ли функция упрощающая такое определение для открытия ордера

if(Bid < OpenPrice && Bid > OpenPrice-10*Point)
if(Ask > OpenPrice && Ask < OpenPrice+10*Point)
Суть в том, чтобы ордер не открывался, если цена не попадает в данный диапазон 
 
MakarFX:

Подскажите, пожалуйста, есть ли функция упрощающая такое определение для открытия ордера

Суть в том, чтобы ордер не открывался, если цена не попадает в данный диапазон 

Ну на бумаге нарисуй

OpenPrice               _________________________

Bid                         _________________________

OpenPrice-10*_Point________________________


Из картинки видно, что OpenPrice - Bid не должно быть больше 10*_Point

 
Alexey Viktorov:

Ну на бумаге нарисуй

OpenPrice               _________________________

Bid                         _________________________

OpenPrice-10*_Point________________________


Из картинки видно, что OpenPrice - Bid не должно быть больше 10*_Point

модуль разницы. Без модуля только верхняя зона попадает в условие. | OpenPrice - Bid |> 10*_Point условие открытия

 
Alexey Viktorov:

Ну на бумаге нарисуй

OpenPrice               _________________________

Bid                         _________________________

OpenPrice-10*_Point________________________


Из картинки видно, что OpenPrice - Bid не должно быть больше 10*_Point

Ты меня удивляешь


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