Коды ошибок - страница 4

 
 

MT4 - Ошибка #130 при использовании функции Ordersend()

Здравствуйте. Я пытаюсь сгенерировать ордер с помощью OrderSend() в MT4, но продолжаю получать ошибку #130. Я понимаю, что ошибка #130 связана с тем, что уровни стоп-лосс или тейк-профит установлены слишком близко к текущей рыночной цене. Я варьировал их безрезультатно. Я использовал как относительные, так и фактические значения.

1. Использование относительных значений тейк-профита и стоп-лосса для покупки:

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-50*Point,Ask+50*Point, "Long Breakout",16384,0,Green);

2.Использование фактических значений для Stoploss и TakeProfit для покупки:

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,TakeProfit, "Long Breakout ",16384,0,Green);

где:

double StopLoss = NormalizeDouble(StopLoss, Digits);

double TakeProfit = NormalizeDouble(TakeProfit, Digits);

и эти значения устанавливаются как внешние значения (например, extern double StopLoss=1.5000, extern double=TakeProfit=1.6000).

Мой брокер - FXCM. Я пробовал умножать значения StoplLoss и TakeProfit на 10. Я получаю один и тот же результат для всех валютных пар.

В каждом случае я получаю ошибку #130. Есть идеи?

Спасибо

 

При установке тейк-профита для позиции на покупку. ТП является

Bid+(50*Point)

В отличие от Ask+...

Крис

 

Извините, да, моя ошибка при наборе текста. Тем не менее, боюсь, что проблема сохраняется.

 

Попробуйте поместить комментарий или print непосредственно перед функцией ordersend, чтобы вывести уровни stoploss и takeprofit. Также убедитесь, что stoploss/tp больше, чем минимальное расстояние.

Поместите это перед отправкой ордера:

if(StopLoss!=0 && StopLoss<(MarketInfo(Symbol(),MODE_STOPLEVEL)))

{

StopLoss=MarketInfo(Symbol(),MODE_STOPLEVEL);

}

if(TakeProfit!=0 && TakeProfit<(MarketInfo(Symbol(),MODE_STOPLEVEL)))

{

TakeProfit=MarketInfo(Symbol(),MODE_STOPLEVEL);

}

Крис

 
kvhutch:
Здравствуйте. Я пытаюсь создать ордер с помощью OrderSend() в MT4, но продолжаю получать ошибку #130. Я понимаю, что ошибка #130 связана с тем, что уровни стоп-лосс или тейк-профит установлены слишком близко к текущей рыночной цене. Я варьировал их безрезультатно. Я использовал как относительные, так и фактические значения.

1. Использование относительных значений тейк-профита и стоп-лосса для покупки:

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-50*Point,Ask+50*Point, "Long Breakout",16384,0,Green);

2.Использование фактических значений для Stoploss и TakeProfit для покупки:

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,TakeProfit, "Long Breakout ",16384,0,Green);

где:

double StopLoss = NormalizeDouble(StopLoss, Digits);

double TakeProfit = NormalizeDouble(TakeProfit, Digits);

и эти значения устанавливаются как внешние значения (например, extern double StopLoss=1.5000, extern double=TakeProfit=1.6000).

Мой брокер - FXCM. Я пробовал умножать значения StoplLoss и TakeProfit на 10. Я получаю один и тот же результат для всех валютных пар.

В каждом случае я получаю ошибку #130. Есть идеи?

Ваше здоровье

FXCM с 5 цифрами... или вы используете FXCM из какой страны?

 

Спасибо за ваши ответы. Да, я использовал операторы печати для проверки значений Stop Loss и Take Profit. На распечатке все выглядело нормально.

Я использую FXCM в Великобритании. Валюты без иены имеют 5 цифр после запятой (например, GBPUSD: 1.55125). Кроссы с иеной имеют три цифры (например, GBPJPY: 132.393). Я подумал, что в этом случае значения, вероятно, придется умножить на 10.

Спасибо

 
kvhutch:
Я подумал, что в этом случае значения, вероятно, придется умножить на 10. Спасибо.

Есть ли у вас что-то подобное в функции init?

if (Digits == 3 || Digits == 5)

{

Factor = 10;

StopLoss *= 10;

TakeProfit *= 10;

MaxSpread *= 10;

Slippage *=10;

}
 

Нет, в операторе OrderSend() я просто умножаю значения Take Profit и StopLoss на 10. Не могли бы вы немного подробнее рассказать об использовании этих значений? Большое спасибо

 

Это просто внешние переменные, умноженные на десять. Вы корректируете их, чтобы включить свои переменные. Но вы делаете только те переменные, которые отличаются у брокеров с дробными пунктами, например Stoploss.

Это означает, что если стоплосс введен как 20 пунктов в списке ввода, он автоматически изменит его на 200, если брокер дробный.

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