Очевидно, что нужно идентифицировать ордера как Buy1..3. Для этого есть два пути:
- Запоминать тикеты ордеров при их открытии. Подойдет в тех случаях, если стратегия работает без переноса на другой терминал/компьютер.
- Записывать идентификаторы (не тикеты) в поле MagicNumber. То есть совместно с ID эксперта записывать туда что-то типа 1, 2, 3 и т.д. В этом случае, найдя ордер при очередном переборе всех рабочих ордеров, всегда можно будет узнать, какой ордер Buy1, а какой - Buy3. Этот вариант является универсальным.
Спасибо всем. Уже сделал . Через голобальные переменные. Пока так
Голобальные переменные тут лишние, как мне кажется. Для себя я решил аналогичную проблему перебором ордеров и сравнением времени открытия. Самый свежий Бай-х не трогаем, а остальные Бай-1,-2...-х-1 модифицируем по своему усмотрению.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет всем.
Есть такая проблема:
Есть 3 прочтых стратегии, каждая из которых открывает новый ордер Бай/Селл, соответсвенно устанавливает тейкпрофит и стоплос
Суть проблемы, как сделать так, если открылся ордер Бай2, то нужно изменить ордер Бай1 и изменить тейкпрофит, стоплос на тот который в Бай2
Далее если открылся Бай3, то меняется тейкпрофит и стоплосс в Бай2, Бай1 --- соответсвенно к уровню Бай3
Тоже самое для SELL
Поонимаю что нужно OrderModify , нужно Ticket. Но как тогда вытянуть тикет и понимать какой куда???
Спасибо за коменты и идеи.
Часть программы для открытия ордеров:
void OpenOrder(int Direction, double lot, double TP, double SL, int magic)//Direction: 1,3,5==BUY; 2,4,5==SELL;
{
int OType=0,Ticket=0;
double TProfit=0,SLoss=0,price=0;
color clr=0;
if(Direction==1)
{
OType=OP_BUY;
price=NormalizeDouble(Ask,Digits);
TProfit=NormalizeDouble(Bid+NormalizeDouble(TP*Point,Digits),Digits);
SLoss=NormalizeDouble(Bid-NormalizeDouble(SL*Point,Digits),Digits);
clr=Blue;
}
if(Direction==2)
{
OType=OP_SELL;
price=NormalizeDouble(Bid,Digits);
TProfit=NormalizeDouble(Ask-NormalizeDouble(TP*Point,Digits),Digits);
SLoss=NormalizeDouble(Ask+NormalizeDouble(SL*Point,Digits),Digits);
clr=Red;
}
if(Direction==3)
{
OType=OP_BUY;
price=NormalizeDouble(Ask,Digits);
TProfit=buyProfit1;
SLoss=NormalizeDouble(Bid-NormalizeDouble(SL*Point,Digits),Digits);
clr=Blue;
}
if(Direction==4)
{
OType=OP_SELL;
price=NormalizeDouble(Bid,Digits);
TProfit=sellProfit1;
SLoss=NormalizeDouble(Ask+NormalizeDouble(SL*Point,Digits),Digits);
clr=Red;
}
if(Direction==5)
{
OType=OP_BUY;
price=NormalizeDouble(Ask,Digits);
TProfit=buyProfit2;
SLoss=NormalizeDouble(Bid-NormalizeDouble(SL*Point,Digits),Digits);
clr=Blue;
}
if(Direction==6)
{
OType=OP_SELL;
price=NormalizeDouble(Bid,Digits);
TProfit=sellProfit2;
SLoss=NormalizeDouble(Ask+NormalizeDouble(SL*Point,Digits),Digits);
clr=Red;
}
if(TP==0)TProfit=0;
if(SL==0)SLoss=0;
Ticket=OrderSend(Symbol(),OType,lot,price,Slippage,0,0,"order",magic,0,clr);