Кто-нибудь знает, почему я получаю ошибку 130, я убедился, что мой SL достаточно широкий и что он находится на правой стороне рынка (т.е. ниже для покупки). Любая помощь будет очень признательна и принесет большое облегчение*.
if(BUYING)
{
if(stoploss > 0) //SL устанавливается на 35
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//ПОКУПКА!!!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);
if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY BUY")
Спасибо всем,
Пэт
попробуйте это... Я думаю, вы путаете, когда использовать Bid и Ask.
if(BUYING)
{
if(stoploss > 0) //SL устанавливается на 35
realSL = Bid-(stoploss * Point);
if(takeprofit > 0)
realTP = Bid + takeprofit * Point;
//ПОКУПКА!!!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);
if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY BUY");
************************************
Правило... если вы входите по ask, то выходите по bid, если вы входите по bid, то выходите по ask.
LongStop = Bid-(stoploss*Point)
LongLimit =Bid+(limit*Point)
LongEntry = ASK
LongTrail = Bid-(stoploss*Point)
ShortStop = Ask+(stoploss*Point)
ShortLimit =Ask-(limit*Point)
ShortEntry = BID
ShortTrail = Ask+(stoploss*Point)
Seawolf
попробуйте это... Я думаю, вы путаете, когда использовать Bid и Ask.
if(BUYING)
{
if(stoploss > 0) //SL установлен на 35
realSL = Bid-(stoploss * Point);
if(takeprofit > 0)
realTP = Bid + takeprofit * Point;
//ПОКУПКА!!!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);
if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY BUY BUY");
************************************
Эмпирическое правило... если вы входите по ask, то выходите по bid, если вы входите по bid, то выходите по ask.
LongStop = Bid-(stoploss*Point)
LongLimit =Bid+(limit*Point)
LongEntry = ASK
LongTrail = Bid-(stoploss*Point)
ShortStop = Ask+(stoploss*Point)
ShortLimit =Ask-(limit*Point)
ShortEntry = BID
ShortTrail = Ask+(stoploss*Point)
Seawolf
Спасибо за ваш ответ, Seawolf, так в моем первоначальном куске кода, если я собираюсь покупать, не должен ли я использовать цену спроса для моего расчета, потому что это будет цена, которую я должен буду заплатить?
это цена, которую вы платите при входе, но вам приходится покрывать спред, поэтому вы платите другую цену при выходе... тот факт, что вы используете ask для входов и выходов, абсолютно неверен.
следуйте правилам, которые я вам дал, и все будет работать хорошо... Я знаю, что это может быть очень запутанным, поэтому я держу его написанным на своей доске и после многих лет торговли и программирования, я все еще обращаюсь к нему почти ежедневно. Я нашел много статей, которые даже не понимают этого правильно, так что не расстраивайтесь.
Здравствуйте
Хотя оригинальный код неверен, поскольку вы используете Bid вместо Ask для покупки, он все равно должен был работать, если стоплосс действительно 35 пунктов. Убедитесь, что система, в которой вы работаете, не перешла на 5 знаков после запятой, иначе стоплосс должен быть 350 пунктов. На демо-версии Interbank использовал 5 знаков после запятой, а на живой системе в какой-то момент - 4.
Кто-нибудь знает, почему я получаю ошибку 130, я убедился, что мой SL достаточно широкий и что он находится на правой стороне рынка (т.е. ниже для покупки). Любая помощь будет очень признательна и принесет большое облегчение* вздохнуть
if(BUYING)
{
if(stoploss > 0) //SL установлен на 35
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//BUYING!!!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);
if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY BUY");
Спасибо всем,
Пэт
Я могу категорически заявить, что Seawolf и Ruptor говорят из своего коллективного заднего прохода.
Для ордера OP_BUY вы абсолютно правы, используя цену Ask для создания цены входа и стопов.
Что вам нужно сделать, так это проверить значения ваших стопов, используя оператор Print("realSL =, "DoubleToStr(realSL,Digits)," realTP=",DoubleToStr(realTP,Digits)) непосредственно перед отправкой ордера, чтобы убедиться, что значения соответствуют вашим ожиданиям. Если они соответствуют вашим ожиданиям, то вам следует проверить допустимые значения с помощью функции MarketInfo() с идентификатором MODE_STOPLEVEL.
Я могу категорически заявить, что Seawolf и Ruptor говорят из своего коллективного заднего прохода.
Для ордера OP_BUY вы абсолютно правы, используя цену Ask для генерации цены входа и стопов.
Что вам нужно сделать, так это проверить значения ваших стопов, используя оператор Print("realSL =, "DoubleToStr(realSL,Digits)," realTP=",DoubleToStr(realTP,Digits)) непосредственно перед отправкой ордера, чтобы убедиться, что значения соответствуют вашим ожиданиям. Если они соответствуют вашим ожиданиям, то вам следует проверить допустимые значения с помощью функции MarketInfo() с идентификатором MODE_STOPLEVEL.
Спасибо, cloudbreaker, я знал, что я был прав с оплатой ask, нигде я не указывал, что я также оплачиваю ask, выходя из сделки, печать значения SL - отличная идея, спасибо за все ваши предложения.
Спасибо, cloudbreaker, я знал, что я был прав с оплатой ask, нигде я не указывал, что я также оплачиваю ask, выходя из сделки, печать значения SL - отличная идея, спасибо за ваш вклад.
Ладно, Cloud, этот вопрос не давал мне покоя, но я думаю, что решил его, по какой-то причине TP и SL были пересчитаны как 1.0 (слишком мало), поэтому я проследил мои переменные через весь процесс и заметил, что я объявил значения takeprofit и stoploss как двойные, а realSL realTP как целые числа, изменение realTP и realSL на двойные устранило проблему, еще раз спасибо.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Кто-нибудь знает, почему я получаю ошибку 130, я убедился, что мой SL достаточно широкий и что он находится на правой стороне рынка (т.е. ниже для покупки). Любая помощь будет очень признательна и принесет большое облегчение*.
if(BUYING)
{
if(stoploss > 0) //SL устанавливается на 35
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//ПОКУПКА!!!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);
if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY BUY");
Спасибо всем,
Пэт