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

 
abeiks:

Сколько баров текущего графика с последнего известное время сервера (TimeCurrent()) до определенного дня первым открытием бара этого дня(TimeDay(Time[80])?


iBarShift должен помочь
 
pu6ka:

iBarShift должен помочь

Весь день намучился но так и не удалось. Не тот опыт мне и еще. :)

Можете ли кто то написать эту функцию?

 
abeiks:

Весь день намучился но так и не удалось. Не тот опыт мне и еще. :)

Можете ли кто то написать эту функцию?

     int n = 0;                                           // индекс дня, в данном случае 0 - текущий день
datetime DayTime = iTime(NULL, PERIOD_D1, n);             // Начало дня "n" в секундах
     int cb = iBarShift(NULL,0,DayTime);                  // Получим на текущем ТФ индекс бара
 
Stells:

Добрый день.

не пойму как такое получается

03:00:24 '9473965': order sell 0.01 GBPUSD opening at 0.00000 sl: 1.65314 tp: 0.00000 failed [Invalid S/L or T/P]

с таким кодом

почему цена открытия нулю равна


Это сегодня ночью было? Тогда скорее всего у Вас стоплосс ниже цены открытия был, а для Sell-ордера цена стоплосса должна быть выше.
 
pu6ka:


Немножко не то. Надо получить начало дня "n" в секундах конкретно из этой функций TimeDay(Time[80]), но это мне не получается.

 

Задумал оценить историю на наличие дыр.
Сделал вот так:

int start() 
{
  if(Time[0] > prev_time ) 
  {
    if( iTime(NULL, PERIOD_M1,0)-iTime(NULL, PERIOD_M1,1) > 200000)
    {
      n=n+1;
      Print("n =",n ,"");
    }
    prev_time = Time[0];
  } 
  
  return (0);
}

Я правильно понимаю, iTime считается в секундах и 200 000 = 2.31 дня ?

Можно ли так делать? (вроде работает, 6 шт. обнаружилось всего)

 
abeiks:

Немножко не то. Надо получить начало дня "n" в секундах конкретно из этой функций TimeDay(Time[80]), но это мне не получается.


Конкретно из этой функций TimeDay(Time[80]), придется делать еще несколько промежуточных вычислений. У Вас все равно есть время бара Time[80]. Проще будет так:

     int n = iBarShift(NULL,PERIOD_D1,Time[80]);          // индекс дня, которому принадлежит время бара - Time[80]
datetime DayTime = iTime(NULL, PERIOD_D1, n);             // Начало дня "n" в секундах
     int cb = iBarShift(NULL,0,DayTime);                  // Получим на текущем ТФ индекс первого бара дня "n"
 
sv.:

Задумал оценить историю на наличие дыр.

Вот очень полезный скрипт, не один год пользуюсь. Если закачан архив котировок, то чтоб особо долго не копаться в настройках, нужно два параметра изменить. Выделил на скрине красной рамкой.

Кинуть на любой график и подождать пару секунд, пока не выдаст сообщение, где находится файл с отчетом.

 
addict:

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


Напиши во такую функцию

int start()

if( OrdersTotal()==0 && CountTrades()==0)

{

OrderSend ("EURUSD",OP_BUYLIMIT,l,1.36000,5,0,1.36000+tp*Point,"my order",1);

OrderSend ("EURUSD",OP_BUYSTOP,l,1.36000,5,0,1.36000+tp*Point,"my order",1);

else

{
OrderSend ("EURUSD",OP_SELLLIMIT,l,1.36000,5,0,1.36000-tp*Point,"my order",2);
OrderSend ("EURUSD",OP_SELLSTOP,l,1.36000,5,0,1.36000-tp*Point,"my order",2);
}

}

return(0);

}

//+------------------------------------------------------------------+

int CountTrades()

{

int count = 0;

for(int trade = OrdersTotal()-1; trade >=0; trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

count++;

}

}

return(count);

 
pu6ka:


Конкретно из этой функций TimeDay(Time[80]), придется делать еще несколько промежуточных вычислений. У Вас все равно есть время бара Time[80]. Проще будет так:


Спасибо! :)

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