Как рассчитать лот на основе валюты счета в Metatrader4 - PullRequest
0 голосов
/ 18 мая 2018

Я немного новичок в этом языке, но у меня есть основы.

Что я хочу: открыть позицию со стоп-лоссом и тейк-профитом.

Я хочу разместитьсделайте заказ на 100 евро, и я хочу установить стоп-лосс на 10 евро и установить тейк-профит на 5 евро.Но, как я вижу, метод OrderSend требует лотов для размещения ордера и уровней для стоп-лосса и тейк-профита.

И моя проблема в том, как рассчитать эти значения на основе сумм в евро, которые я хочу установить?

Я искал в сети какие-то расчеты лотов, пипов и т. Д., Но в конце концов то, что я попробовал, не сработало.Вот как я хотел рассчитать:

double AmountToTradeInEuro = 100;
double AmountToTakeInEuro = 5;
double AmountToMaxLossInEuro = 10;
double Lots = AmountToTradeInEuro / MarketInfo(Symbol(), MODE_TICKVALUE);
double StopLossLevel = AmountToTakeInEuro / MarketInfo(Symbol(), MODE_TICKVALUE);
double TakeProfitLevel = AmountToMaxLossInEuro / MarketInfo(Symbol(), MODE_TICKVALUE);
OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, StopLossLevel, TakeProfitLevel);

По сути, я хотел бы знать, как рассчитать лот для 100 евро и как рассчитать уровни для стоп-лосса и тейк-профита.

уровни стоп-лосс и тейк-профит тоже много?Или это разные юниты?

1 Ответ

0 голосов
/ 18 мая 2018

Добро пожаловать на MQL4!Первый вопрос касается валюты счета - если это доллар США (или что-то еще, а не евро) - вы должны сделать такую ​​конвертацию.Хорошо, позвольте мне описать, что делать с балансом евро.Вы можете вычислить размер лота на основе стоп-лосса - в таком случае вы можете получить значение тика, используя MarketInfo(_Symbol,MODE_TICKVALUE).Но вы должны знать уровень цены, где выйти (стоп-лосс), будь то 1 пункт или 100 пунктов.Давайте подумаем, что это 100 тиков (что равно 10 пипсам 5-значного брокера).Тогда ваш размер лота равен
double lot = AmountToMaxLoss / (MarketInfor(_Symbol, MODE_TICKVALUE) * stoploss), затем вам нужно нормализовать результат:

double lot_step=MarketInfo(_Symbol, MODE_LOTSTEP); double result = lot_step * NormalizeDouble(lot / lot_step, 0);, затем проверьте, что result > MarketInfo(_Symbol, MODE_MINLOT).Что касается takeprofit - может показаться странным, что вы ожидаете целевую прибыль в валюте вместо уровня цен, но если вам нужно - то же самое.

...