Ситуация такая - например нужно открыть позицию по паре EURUSD со стопом 30 пунктов и тейкпрофитом 30 пунктов, перед открытием нужно определить объем лота так чтобы при убыточной сделке был убыток в 100 USD. Как это можно посчитать средствами MQL5?
Деньги / (Стоплос_в_пунктах*MarketInfo(Symbol(),MODE_TICKVALUE))
А вы его в цене считаете
Совершенно верно. Когда я эту формулу писал у меня СЛ не определялся заданным значением, а считался как разница цены открытия ордера и неким уровнем, потому и пришлось сумму риска умножить на _Point
То есть открываем позицию ордером, закрываем ее обратным ордером, смотрим объем позиции в результате.
Ожидается 0 (ноль), имеем 1 (один). Логи ниже (начало внизу).
2015.10.2716:28:11.4762015.10.2610:05:08ExpertRemove() function called
2015.10.2716:28:11.4652015.10.2610:03:14 INFO>> *** VOLUME=1.0 *** ID=2 *** TYPE=POSITION_TYPE_SELL *** OrdersTotal()=02015.10.2716:28:11.4502015.10.2610:01:47 CLOSE Volume=1.02015.10.2716:28:11.4502015.10.2610:01:47 CLOSE OrdersTotal()=02015.10.2716:28:11.4502015.10.2610:01:47 CLOSE Deal=32015.10.2716:28:11.4502015.10.2610:01:47 CLOSE Order=32015.10.2716:28:11.4502015.10.2610:01:47 CLOSE Retcode=100092015.10.2716:28:11.4502015.10.2610:01:47 CLOSE OrderSend=true2015.10.2716:28:11.4492015.10.2610:01:47 order performed buy 1.00 at 9249 [#3buy 1.00 SBRF-12.15 at 9249]
2015.10.2716:28:11.4492015.10.2610:01:47 deal performed [#3buy 1.00 SBRF-12.15 at 9249]
2015.10.2716:28:11.4492015.10.2610:01:47 deal #3buy 1.00 SBRF-12.15 at 9249 done (based on order #3)
2015.10.2716:28:11.4492015.10.2610:01:47 exchange buy 1.00 SBRF-12.15 at 9249 (9242 / 9249 / 9242)
2015.10.2716:28:11.4492015.10.2610:01:47 CLOSE>> *** VOLUME=1.0 *** ID=2 *** TYPE=POSITION_TYPE_SELL *** OrdersTotal()=02015.10.2716:28:11.4222015.10.2610:00:57 order performed sell 1.00 at 9205 [#2sell stop 1.00 SBRF-12.15 at 9205]
2015.10.2716:28:11.4222015.10.2610:00:57 deal performed [#2sell 1.00 SBRF-12.15 at 9205]
2015.10.2716:28:11.4222015.10.2610:00:57 deal #2sell 1.00 SBRF-12.15 at 9205 done (based on order #2)
2015.10.2716:28:11.4222015.10.2610:00:57 order [#2sell stop 1.00 SBRF-12.15 at 9205] triggered
2015.10.2716:28:11.4222015.10.2610:00:57 OPEN Volume=0.02015.10.2716:28:11.4222015.10.2610:00:57 OPEN OrdersTotal()=12015.10.2716:28:11.4222015.10.2610:00:57 OPEN Deal=02015.10.2716:28:11.4222015.10.2610:00:57 OPEN Order=22015.10.2716:28:11.4222015.10.2610:00:57 OPEN Retcode=100092015.10.2716:28:11.4222015.10.2610:00:57 OPEN OrderSend=true2015.10.2716:28:11.4222015.10.2610:00:57 sell stop 1.00 SBRF-12.15 at 9205 (9205 / 9227 / 9205)
2015.10.2716:28:11.4222015.10.2610:00:57 OPEN>> *** VOLUME=0.0 *** ID=0 *** TYPE=POSITION_TYPE_BUY *** OrdersTotal()=02015.10.2716:28:11.344 SBRF-12.15,M1: testing of Experts\Projects\CoinAge5\Helper_v01\mq5\Tst\TST006_Open_Close_Positions_001.ex5 from 2015.10.2600:00 to 2015.10.2700:00 started
Помогите сообразить.
Ситуация такая - например нужно открыть позицию по паре EURUSD со стопом 30 пунктов и тейкпрофитом 30 пунктов, перед открытием нужно определить объем лота так чтобы при убыточной сделке был убыток в 100 USD. Как это можно посчитать средствами MQL5?
SL=30;
Lot=Формула расчета
Заранее благодарен.
Для четвёрки можно так посчитать:
Лот=Деньги / (Стоплос_в_пунктах*MarketInfo(Symbol(),MODE_TICKVALUE))
Для четвёрки можно так посчитать:
Лот=Деньги / (Стоплос_в_пунктах*MarketInfo(Symbol(),MODE_TICKVALUE))
Спасибо, но мне не помогло.
Смотрите не MarketInfo(), а SymbolInfoDouble()
И что значит "не помогло"? Я ж не рыбу давал, а удочку.
Смотрите не MarketInfo(), а SymbolInfoDouble()
И что значит "не помогло"? Я ж не рыбу давал, а удочку.
Я еще слишком молод для использования удочки)
Вот написал скрипт по приведенной формуле выше
void OnStart()
{
//---
double Test=100/(300*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE));
Alert(Test);
Выдает 33333.33, может блесна не та?
Я еще слишком молод для использования удочки)
Вот написал скрипт по приведенной формуле выше
void OnStart()
{
//---
double Test=100/(300*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE));
Alert(Test);
Выдает 33333.33, может блесна не та?
Деньги / (Стоплос_в_пунктах*MarketInfo(Symbol(),MODE_TICKVALUE))
А вы его в цене считаете
Я еще слишком молод для использования удочки)
Вот написал скрипт по приведенной формуле выше
void OnStart()
{
//---
double Test=100/(300*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE));
Alert(Test);
Выдает 33333.33, может блесна не та?
Когда-то я писал такую формулу
Lot = AccountFreeMargin()*Risk/100*_Point/(StopLoss*MarketInfo(Symbol(), MODE_TICKVALUE))
AccountFreeMargin()*Risk/100 --- это твои $100
StopLoss --- разница цен открытия ордера и СЛ (не в пунктах)
Соответственно MarketInfo() надо заменить на SymbolInfoDouble()
Я еще слишком молод для использования удочки)
Вот написал скрипт по приведенной формуле выше
void OnStart()
{
//---
double Test=100/(300*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE));
Alert(Test);
Выдает 33333.33, может блесна не та?
Смотрите что у вас, если по-русски и при _Point, равном 0.00001:
Чтобы заработать 100 долларов при тейке в 0.003 пункта (300*0.00001), лот должен быть 33333.33. Так что блесна точно не та ;)
Деньги / (Стоплос_в_пунктах*MarketInfo(Symbol(),MODE_TICKVALUE))
А вы его в цене считаете
Как добиться, чтобы объём позиции стал равным 0 (нулю)? (ФОРТС, Открытие-Брокер, Реал)
Есть следующий код:
То есть открываем позицию ордером, закрываем ее обратным ордером, смотрим объем позиции в результате.
Ожидается 0 (ноль), имеем 1 (один). Логи ниже (начало внизу).
В чем причина?
Как добиться, чтобы объём позиции стал равным 0 (нулю)? (ФОРТС, Открытие-Брокер, Реал)
Есть следующий код:
То есть открываем позицию ордером, закрываем ее обратным ордером, смотрим объем позиции в результате.
Ожидается 0 (ноль), имеем 1 (один). Логи ниже (начало внизу).
В чем причина?