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

 
AlGuruПодскажите пожалуйста. Как указать в советнике закрытие на следующей свечке? 
datetime Time[] -Массив-таймсерия, содержащий время открытия каждого бара текущего графика. Time[0] - время открытия последнего бара. Если время OrderOpenTime() открытия ордера меньше Time[0] - значит, ордер открыт на прошлом баре, и такой ордер в соответствии с Вашей стратегией пора закрыть
 
STARIJ:
datetime Time[] -Массив-таймсерия, содержащий время открытия каждого бара текущего графика. Time[0] - время открытия последнего бара. Если время OrderOpenTime() открытия ордера меньше Time[0] - значит, ордер открыт на прошлом баре, и такой ордер в соответствии с Вашей стратегией пора закрыть
Либо о нём забыли, и он был открыт год назад, например ;)
 
STARIJ:
datetime Time[] -Массив-таймсерия, содержащий время открытия каждого бара текущего графика. Time[0] - время открытия последнего бара. Если время OrderOpenTime() открытия ордера меньше Time[0] - значит, ордер открыт на прошлом баре, и такой ордер в соответствии с Вашей стратегией пора закрыть


Спасибо! Только решил проблему функцией iTime. C массивами пока не дружу )).

 
AlGuru:


Спасибо! Только решил проблему функцией iTime. C массивами пока не дружу )).

Покажите как решили.

Просто есть кое-что, чего вы могли и не учесть:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Artyom Trishkin, 2017.05.25 19:43

STARIJ:
datetime Time[] -Массив-таймсерия, содержащий время открытия каждого бара текущего графика. Time[0] - время открытия последнего бара. Если время OrderOpenTime() открытия ордера меньше Time[0] - значит, ордер открыт на прошлом баре, и такой ордер в соответствии с Вашей стратегией пора закрыть

Либо о нём забыли, и он был открыт год назад, например ;)

 
Artyom Trishkin:

Покажите как решили.

Просто есть кое-что, чего вы могли и не учесть:



OrderOpenTime() < iTime(Symbol(), 0, 0)
 
AlGuru:

OrderOpenTime() < iTime(Symbol(), 0, 0)

А если время открытия ордера было неделю назад? То оно точно не на прошлой свече (если график не недельный). Его тоже закрывать?

Конечно всё зависит от требований вашей ТС, но я бы пошёл иным путём...

 
Artyom Trishkin:

А если время открытия ордера было неделю назад? То оно точно не на прошлой свече (если график не недельный). Его тоже закрывать?

Конечно всё зависит от требований вашей ТС, но я бы пошёл иным путём...


Это дополнительное условие. Закрывается позиция при пересечении цены линии МА. Просто бывает что цена открывается прямо на линии и происходит на каждом тике открытие и закрытие позиции. Решал проблему путем закрытия позиции не раньше следующей свечки.
 

Всем доброго времени суток!

Подскажите пожалуйста как закодировать в тестере стратегий  следующее действие

Общий смысл

1.Открывается ордер N -X  ( объем = 0.1)

2.Если именно этот ордер закрывается по СЛ, то. для компенсации потерь, сразу по цене закрытия по СЛ ордера N X ,  открывается ордер N - X1 ( объем = 0.3)

МНЕ   НУЖНО

3 Если ордер ( объем = 0.3) закрывается по СЛ - запомнить только  значение  часа  открытия ордера N -X для компенсации потерь по которому он и был открыт .

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

ПРИМЕЧАНИЕ , связанное с закрытием ордеров на одном тике.

Бывает иногда что на одном тике закрываются по СЛ больше одного ордера и объемом 0.1 и объемом 0.3.

Если на одном тике закрывается по СЛ , например 3 ордера по 0.1, то вместо открытия 3 ордеров по 0.3. - открывается только 1 ордер по 0.3 лота

 В этом случае при закрытии по СЛ только 1 ордера по 0.3 лота я не получу значений часа открытия двух ордеров по 0.1 лота для компенсации потерь по которым они и был открыты.

То есть, мне нужно что бы,  в этом случае, открылось именно 3 ордера по 0.3 лота, а не один.


А бывает, что на одном тике закрываются по СЛ , например 3 ордера объемом 0.3 лота, не смотря на то, что соответствующие им ордера по 0.1. лота открылись на разных тиках( но просто  по одной цене)

В этом случае программа опять же  сохраняет нужное мне значение часа только одного последнего ордера объемом 0.1 лот .

А мне нужно что бы программа запоминала значение часа каждого закрытого по СЛ ордера объемом 0.1 лот.


Вот мой код, который нужно довести до ума.

Спасибо за помощь.

int  A2;
int A1;
int A;
int start()                                             
{                                               
int ot = OrdersTotal();                                         
int Ht = OrdersHistoryTotal();
                                                
                                                
if(Bid == iOpen(NULL,PERIOD_H1,0))
if ( A!= Hour() )
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
A = Hour();
}                                               
//**************************************************************************************
int Счет=0, Номер=OrdersHistoryTotal()-1;
//int A1=0;
  for( ; Номер>=0; Номер--)
  {
    if(!OrderSelect(Номер, SELECT_BY_POS, MODE_HISTORY)) continue;
    A1=OrderOpenTime();
    if(OrderProfit()>=0) break;
    Счет++;
    if(Счет ==1&&A2!=OrderOpenTime())
    {
    A2=OrderOpenTime();
     OrderSend(Symbol(),OP_SELL,0.3,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
    }
  }
//************************************************************************************** 
return;
}

Вот пример ситуации в которой на одном тике закрываются несколько ордеров

        08:51:38.906    2017.03.27 13:09:44  Tester: stop loss #200 at 1.08858 (1.08856 / 1.08858)
2       08:51:38.906    2017.03.27 13:09:44  1 = 1 = 1 = 1 EURUSD,M1: open #214 sell 0.30 EURUSD at 1.08856 sl: 1.09258 tp: 1.08658 ok
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #192 at 1.08879 (1.08877 / 1.08879)
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #193 at 1.08879 (1.08877 / 1.08879)
2       08:51:38.906    2017.03.27 13:10:28  1 = 1 = 1 = 1 EURUSD,M1: open #215 sell 0.30 EURUSD at 1.08877 sl: 1.09279 tp: 1.08679 ok
0       08:51:38.906    2017.03.27 13:10:29  Tester: stop loss #194 at 1.08880 (1.08878 / 1.08880)
 
AlGuru:

Это дополнительное условие. Закрывается позиция при пересечении цены линии МА. Просто бывает что цена открывается прямо на линии и происходит на каждом тике открытие и закрытие позиции. Решал проблему путем закрытия позиции не раньше следующей свечки.

Такую проблему нужно решать путём проверки: а есть ли, или была ли уже открыта и закрыта позиция на этом самом баре.

Иначе вы всё в кучу накидаете. Сигнальная функция должна отсылать сигналы, а торговая функция уже должна проверять валидность сигнала.

 

Здравствуйте. Почему уменя отоброжение волютных пар euro vs usd в числах 149,16325 ане в 1,0616? 


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