![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем привет,
я хочу собрать все ордера (buy&sell) пары с помощью магии и если они достигают безубытка, все ордера должны быть закрыты.
любое руководство очень приветствуется, спасибо
extern bool PairBreakeven=true;// Безубыточность по паре всех ордеров одной пары/магии
extern double Pairbreakevengain=6;// прирост в пунктах, необходимый для обеспечения безубыточности
extern double Pairbreakeven=3;// безубыток, ордер закрыт, прибыль/проскальзывание 3 пункта
double Pairmovebreakeven;
if(PairBreakeven==true){
if(Pairbreakevengain>0)Pairmovebreakeven(Pairbreakevengain,Pairbreakeven);
CloseBuyOrders(Magic);
CloseSellOrders(Magic);
}
void Pairmovebreakeven(double Pairbreakevengain,double Pairbreakeven){
RefreshRates();
if(OrdersTotal()>0){
for(int i=OrdersTotal();i>=0;i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){
return;
}
}
}
}
int CloseBuyOrders(int Magic){ //op_sell аналогично
int total=OrdersTotal();
for(int cnt=total-1;cnt>=0;cnt--){
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){
if(OrderType()==OP_BUY){
OrderClose(OrderTicket(),OrderLots(),Bid,3*mt);
}
}
}
return(0);
}Основная проблема с этим кодом заключается в функции BE, она никогда не останавливается и не предпринимает никаких действий. Если вы не выражаете свое намерение словами, я не могу определить, что вы пытаетесь сделать из кода.
Вы хотите, чтобы код обнаружил все ордера на вашем счете, у которых стоп-лосс=цена открытия ордера, и закрыл их все? То есть фактически безубыточное действие выполняется другим советником? Хотел бы помочь, но не могу понять, что вы хотите сделать.
Основная проблема с этим кодом в функции BE, она никогда не перемещает стоп и не предпринимает никаких действий. Если вы не сформулируете свое намерение словами, я не смогу определить, что вы пытаетесь сделать из кода. Вы хотите, чтобы код обнаружил все ордера на вашем счете, у которых стоп-лосс=цена открытия ордера, и закрыл их все? То есть фактически безубыточное действие выполняется другим советником? Хотел бы помочь, но не могу понять, что вы хотите сделать.
КристинаЛи,
извините, за мою неточность.
-я хочу собрать все ордера пары по магии и суммировать прибыль от всех ордеров, независимо от buy, sell, tp, sl, пример: у нас 8 ордеров buy & sell, суммированная прибыль составляет 6 пунктов // extern double Pairbreakevengain=6;// прибыль в пунктах, необходимая для обеспечения безубыточности
-если прибыль +6 пунктов для всех ордеров пары (buy&sell), все ордера (buy/sell) sl должны быть установлены stoploss на текущую цену -3 // extern double Pairbreakeven=3;// безубыток, ордер закрыт, прибыль/проскальзывание 3 пункта
-если Pairbreakevengain выпадает из прибыли всех ордеров пары пример: 8 смешанных ордеров buy/sell прибыль суммируется 6 обратно к 3, все ордера закрываются
У меня есть правильный рабочий модуль для одиночного безубытка ордера и я пытался модифицировать его самостоятельно, мне не хватает навыков работы с кодом mt4, много лет назад я изучал ассемблер...
Должен ли я выложить функцию одного безубыточного ордера?
спасибо за помощь
IX
Привет, IX,
Я знаю, что вы сейчас пытаетесь сделать. Это можно сделать.
Все несколько осложняется тем, что у вас могут быть покупки и продажи в одно и то же время. Потому что когда вы говорите о "текущей цене", для покупок это означает Bid, для продаж - Ask, потому что только они являются реалистичной ценой для закрытия ордеров. Таким образом, вы можете видеть, что в любой момент, когда вы настраиваете стоп-лосс для своих ордеров, покупатели и продавцы получают разную цену. Если ваш спред не постоянен, есть много шансов, что ваши ордера не будут закрыты в одно и то же время, иногда возможно, что половина ваших ордеров не будет закрыта.
Я думаю, что хороший способ сделать это - не перемещать стоп-лосс, вместо этого советник активирует память, когда общая прибыль в 6 пунктов будет достигнута, затем просто закрывает все ордера на рынке, пока общая прибыль падает до 3 пунктов. В этом случае советник заставляет закрывать ордера, они не останавливаются MT4.
Здравствуйте, IX,
Я знаю, что вы сейчас пытаетесь сделать. Это можно сделать.
Все несколько осложняется тем, что у вас могут быть покупки и продажи в одно и то же время. Потому что когда вы говорите о "текущей цене", для покупок это означает Bid, для продаж - Ask, потому что только они являются реалистичной ценой для закрытия ордеров. Таким образом, в любой момент времени, когда вы настраиваете стоп-лосс для своих ордеров, покупатели и продавцы получают разницу в цене. Если ваш спред не постоянен, есть много шансов, что ваши ордера не будут закрыты в одно и то же время, иногда возможно, что половина ваших ордеров не будет закрыта.
Я думаю, что хороший способ сделать это - не перемещать стоп-лосс, вместо этого советник активирует память, когда общая прибыль в 6 пунктов будет достигнута, затем просто закроет все ордера на рынке, пока общая прибыль упадет до 3 пунктов. В этом случае советник заставляет закрывать ордера, они не останавливаются MT4.Привет, КристинаЛи,
я согласен на 100%, это слишком сложно, я понимаю, что вы имеете в виду, возможно, расчет пары (корзины) без перемещения стоплосса является решением, например:
- выбрать все ордера по паре и магии
- суммировать прибыль всех ордеров
- если сумма прибыли = 6 пунктов
- закрыть все ордера, если проскальзывания нет, то безубыток будет 6 пунктов "профита", если проскальзывание 3 пункта, то безубыток будет 3 пункта "профита".
1) преимущество: никаких проблем
2) недостаток: нет места (3 пипса) для всех ордеров, если у меня 7 бай и 6 селл хеджированных ордеров, если один бай ордер увеличивается на 6 пипсов, все ордера закрываются, есть ли возможность пометить все ордера в памяти для закрытия при достижении 6 пипсов (breakeven=true) при уменьшении на 3 пипса (6-3= 3 пипса прибыли) (breakevencloseorders=true)?
Хеджированные ордера 7buy и 6sell не могут подняться выше 6 пунктов с #1, они всегда закрываются.
В #2, 6 пунктов - это только маркер активации, при снижении до 3 пунктов, закрываем все ордера, при повышении выше 6 пунктов, например до 15 пунктов, есть пространство от +3 пунктов до 15 пунктов, что дает 12 пунктов прибыли.
спред на данный момент не рассчитывается! так как 7buys и 6sells суммируются с 2 пипсовым спредом до 26 пипсов для безубытка "0" должен быть для одного ордера на покупку и для того чтобы иметь 32 пипса с #1 и 29 пипсов с #2 для одного ордера на покупку - я прав?
спасибо за ваши предложения
IX
Привет, КристинаЛи,
я согласен на 100%, это слишком сложно, я понимаю, что вы имеете в виду, возможно, расчет пары (корзины) без перемещения стоплосса является решением, например:
- выбрать все ордера по паре и магии
- суммируем прибыль всех ордеров
- если сумма прибыли = 6 пунктов
- закрываем все ордера, если проскальзывания нет, то безубыток будет 6 пунктов "профита", если проскальзывание 3 пункта, то безубыток будет 3 пункта "профита"
1) преимущество: никаких проблем
2) недостаток: нет места (3 пипса) для всех ордеров, если у меня 7 бай и 6 селл хеджированных ордеров, если один бай ордер увеличивается на 6 пипсов, все ордера закрываются, есть ли возможность пометить все ордера в памяти для закрытия при достижении 6 пипсов (breakeven=true) при уменьшении на 3 пипса (6-3= 3 пипса прибыли) (breakevencloseorders=true)?
Хеджированные ордера 7buy и 6sell не могут подняться выше 6 пунктов с #1, они всегда закрываются.
В #2, 6 пунктов - это только маркер активации, при снижении до 3 пунктов, закрываем все ордера, при повышении выше 6 пунктов, например до 15 пунктов, есть пространство от +3 пунктов до 15 пунктов, что дает 12 пунктов прибыли.
спред на данный момент не рассчитывается! так как 7buys и 6sells суммируются с 2 пипсовым спредом до 26 пипсов для безубытка "0" должен быть для одного ордера на покупку и для того чтобы иметь 32 пипса с #1 и 29 пипсов с #2 для одного ордера на покупку - я прав?
Спасибо за ваши предложения
IXДумаю, вы меня не совсем правильно поняли, то, что вы хотите, может быть точно достигнуто, только нет фактической модификации стоп-лосса. Я найду немного времени, чтобы сделать код сегодня и продемонстрировать вам. Кристина
Привет, КристинаЛи,
я согласен на 100%, это слишком сложно, я понимаю, что вы имеете в виду, возможно, расчет пары (корзины) без перемещения стоплосса является решением, например:
- выбрать все ордера по паре и магии
- суммируем прибыль всех ордеров
- если сумма прибыли = 6 пунктов
- закрываем все ордера, если проскальзывания нет, то безубыток будет 6 пунктов "профита", если проскальзывание 3 пункта, то безубыток будет 3 пункта "профита"
1) преимущество: никаких проблем
2) недостаток: нет места (3 пипса) для всех ордеров, если у меня 7 бай и 6 селл хеджированных ордеров, если один бай ордер увеличивается на 6 пипсов, все ордера закрываются, есть ли возможность пометить все ордера в памяти для закрытия при достижении 6 пипсов (breakeven=true) при уменьшении на 3 пипса (6-3= 3 пипса прибыли) (breakevencloseorders=true)?
Хеджированные ордера 7buy и 6sell не могут подняться выше 6 пунктов с #1, они всегда закрываются.
В #2, 6 пунктов - это только маркер активации, при снижении до 3 пунктов, закрываем все ордера, при повышении выше 6 пунктов, например до 15 пунктов, есть пространство от +3 пунктов до 15 пунктов, что дает 12 пунктов прибыли.
спред на данный момент не рассчитывается! так как 7buys и 6sells суммируются с 2 пипсовым спредом до 26 пипсов для безубытка "0" должен быть для одного ордера на покупку и для того чтобы иметь 32 пипса с #1 и 29 пипсов с #2 для одного ордера на покупку - я прав?
Спасибо за ваши предложения
IXНа самом деле, теперь я немного больше подумал, то, что вы просили, не может быть сделано.
Это довольно интересно, я закодировал много подобных функций, вы можете вычислить BE интерна долларовой суммы или пипсов, но они все одного типа ордера. Это не может быть сделано как с покупками, так и с продажами. Например, если у вас есть x покупок (они могут быть разного размера лота), в какой-то момент вся долларовая прибыль, сложенная вместе, равна 0, так что теперь вы находитесь в BE. Тогда, если это покупки, если вы хотите получить 3 пункта прибыли, то просто прибавьте 3 пункта к текущему Bid, тогда у вас будет целевая цена. Если все продажи, то вычтите 3 пункта из текущего Ask, тогда у вас будет целевая цена. Но если у вас есть и покупки, и продажи, что вы делаете: прибавляете или вычитаете?
Как вы определите, что у вас есть 3 пункта прибыли в следующей ситуации? 1 лот купить по 1.4100, 2 лота продать по 1.4150?
Единственное, что можно сделать, это использовать прибыль в долларах, а не в пунктах, как я думаю.
Я думаю, вы меня не совсем правильно поняли, то, что вы хотите, может быть точно достигнуто, только нет фактической модификации стоп-лосса. Я найду немного времени, чтобы сделать код сегодня и продемонстрировать вам. Кристина
Спасибо, Кристина,
я очень ценю ваши знания!
Майкл
На самом деле, теперь, когда я подумал об этом немного больше, то, что вы просили, не может быть сделано.
Это довольно интересно, я закодировал много похожих функций, вы можете вычислить BE интерна долларовой суммы или пунктов, но все они одного типа ордера. Это не может быть сделано как с покупками, так и с продажами. Например, если у вас есть x покупок (они могут быть разного размера лота), в какой-то момент вся долларовая прибыль, сложенная вместе, равна 0, так что теперь вы находитесь в BE. Тогда, если это покупки, если вы хотите получить 3 пункта прибыли, то просто прибавьте 3 пункта к текущему Bid, тогда у вас будет целевая цена. Если все продажи, то вычтите 3 пункта из текущего Ask, тогда у вас будет целевая цена. Но если у вас есть и покупки, и продажи, что вы делаете: прибавляете или вычитаете?
Как вы определите, что у вас есть 3 пункта прибыли в следующей ситуации? 1 лот покупаем по 1.4100, 2 лота продаем по 1.4150?
Единственное, что можно сделать, это использовать долларовую прибыль, а не прибыль в пунктах.Кристина,
Добавлять или вычитать не имеет значения, потому что сумма лотов 7 ордеров на покупку против 6 ордеров на продажу достаточна для достижения нормальной прибыли, BE для всех ордеров пары должен работать как защитная функция:
С этой функцией хеджирования, вы экономите много маржи, с шагом между 50 пунктами, ваш счет не может быть стерт, если нормальная прибыль не достигнута, BE должен закрыть все ордера и начать с нового сигнала и первого ордера.
Для сигналов покупки/продажи я использую Price Action.
Кристина,
Добавлять или убавлять не имеет значения, потому что сумма лота 7 ордеров на покупку против 6 ордеров на продажу достаточна для достижения нормальной прибыли, BE для всех ордеров пары должен работать как защитная функция:
С этой функцией хеджирования, вы экономите много маржи, с шагом между 50 пунктами, ваш счет не может быть стерт, если нормальная прибыль не достигнута, BE должен закрыть все ордера и начать с нового сигнала и первого ордера.
Для сигналов покупки/продажи я использую Price Action.
Дополнительная информация:
- Я торгую 8-10 основными валютами одновременно для диверсификации (частично корреляции), поэтому лучше торговать 10 парами с 0.01, чем одной парой с 0.1.
- Я удваиваю шаги между ордерами на 25, 50, 100, 200, 400,
пример:
1-й ордер 1.5000
2-й ордер 1.5025
3-й.........1.050
4-й.........1.100
и так далее
Я хотел бы помочь с этой функцией, о которой вы говорите, но, похоже, я не могу просто понять вашу логику. Это действительно не имеет никакого отношения к другой логике стратегии.
Я просто хотел бы знать следующее.
Если у вас есть 1 лот на покупку по цене 1.4110 и 2 лота на продажу по цене 1.4200. По какой цене вы думаете, что у вас есть 6 пунктов прибыли?