Минимально допустимый уровень стоп-лосса/тейк-профита - страница 2

Минимально допустимый уровень стоп-лосса/тейк-профита - страница 2

double MinLot=MarketInfo( Symbol() ,MODE_MINLOT); - минимальный размер лота double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); - минимально допустимый уровень стоп-лосса/тейк-профита в валюте котировки double VStopLossLong=Ask- VMin ; - уровень стоп-лосса double VTakeProfitLong=Ask+ VMin ; - уровень тейк-профита

int ticket=OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,VTakeProfitLong,"BUY: min",16381,0,Green); - не выставляется.

Но если использовать как написано выше, то есть использовать StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);

то получается, что выставляется не минимальные уровни.

double MinLot=MarketInfo(Symbol(),MODE_MINLOT); - минимальный размер лота double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); - минимально допустимый уровень стоп-лосса/тейк-профита в валюте котировки double VStopLossLong=Ask- VMin ; - уровень стоп-лосса double VTakeProfitLong=Ask+ VMin ; - уровень тейк-профита

int ticket=OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,VTakeProfitLong,"BUY: min",16381,0,Green); - не выставляется.

Но если использовать как написано выше, то есть использовать StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);

то получается, что выставляется не минимальные уровни.

Брокеры имеют различные уровни и меняют их в зависимости от ситуаций.

Вот мой полный код:

double StopLoss=0.1; // процент убытка double TakeProfit=0.1; // процент прибыли double MinLot=MarketInfo( Symbol() ,MODE_MINLOT); // Минимальный размер лота double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); double VStopLossLong=Ask*(1-StopLoss/100); // стоп-лосс для лонга double VTakeProfitLong=Ask*(1+TakeProfit/100); // тейк-профит для лонга double VStopLossShort=Bid*(1+StopLoss/100); // стоп-лосс для шорта double VTakeProfitShort=Bid*(1-TakeProfit/100); // тейк-профит для шорта // проверка на минимальный уровень if (Ask-VStopLossLong<VMin) VStopLossLong=Ask-VMin; if (VTakeProfitLong-Ask<VMin) VTakeProfitLong=Ask+VMin; if (VStopLossShort-Bid<VMin) VStopLossShort=Bid+VMin; if (Bid-VTakeProfitShort<VMin) VTakeProfitShort=Bid-VMin; // выставление ордера int ticket=OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,VTakeProfitLong,"BUY: Test",16382,0,Green);

Сейчас проверю то, что вы предлагаете.

ТО что вы предлагаете MarketInfo( Symbol() ,MODE_STOPLEVEL) это же минимально допустимый уровень стоп-лосса/тейк-профита в пунктах, а надо же это перевести в валюту?

Вот мой полный код:

double StopLoss=0.1; // процент убытка double TakeProfit=0.1; // процент прибыли double MinLot=MarketInfo(Symbol(),MODE_MINLOT); // Минимальный размер лота double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); double VStopLossLong=Ask*(1-StopLoss/100); // стоп-лосс для лонга double VTakeProfitLong=Ask*(1+TakeProfit/100); // тейк-профит для лонга double VStopLossShort=Bid*(1+StopLoss/100); // стоп-лосс для шорта double VTakeProfitShort=Bid*(1-TakeProfit/100); // тейк-профит для шорта // проверка на минимальный уровень if (Ask-VStopLossLong<VMin) VStopLossLong=Ask-VMin; if (VTakeProfitLong-Ask<VMin) VTakeProfitLong=Ask+VMin; if (VStopLossShort-Bid<VMin) VStopLossShort=Bid+VMin; if (Bid-VTakeProfitShort<VMin) VTakeProfitShort=Bid-VMin; // выставление ордера int ticket=OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,VTakeProfitLong,"BUY: Test",16382,0,Green);

Сейчас проверю то, что вы предлагаете.

И так каждое значение! Смотрите учебник!

Здравствуйте, подскажите пожалуйста, как правильно пользоваться минимальным допустимым уровнем стоп-лосса/тейк-профита в пунктах. Я написал следующее:

int MinLot=MarketInfo(Symbol(),MODE_MINLOT); - минимальный размер лота

double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); - минимально допустимый уровень стоп-лосса/тейк-профита в валюте котировки

double VStopLossLong= Ask - VMin ; - уровень стоп-лосса double VTakeProfitLong=Ask+ VMin ; - уровень тейк-профита

int ticket=OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,VTakeProfitLong,"BUY: min",16381,0,Green);

Но ордер не выставляется :(. Заранее спасибо.

double TakeProfit=0.1; // процент прибыли double MinLot=MarketInfo(Symbol(),MODE_MINLOT); // Минимальный размер лота double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); double VStopLossLong=Ask*(1-StopLoss/100); // стоп-лосс для лонга double VTakeProfitLong=Ask*(1+TakeProfit/100); // тейк-профит для лонга double VStopLossShort=Bid*(1+StopLoss/100); // стоп-лосс для шорта double VTakeProfitShort=Bid*(1-TakeProfit/100); // тейк-профит для шорта // проверка на минимальный уровень if (Ask-VStopLossLong<VMin) VStopLossLong=Ask-VMin; if (VTakeProfitLong-Ask<VMin) VTakeProfitLong=Ask+VMin; if (VStopLossShort-Bid<VMin) VStopLossShort=Bid+VMin; if (Bid-VTakeProfitShort<VMin) VTakeProfitShort=Bid-VMin;

VStopLossLong=NormalizeDouble(VStopLossLong,MarketInfo(Symbol(),MODE_DIGITS)); VTakeProfitLong=NormalizeDouble(VTakeProfitLong,MarketInfo(Symbol(),MODE_DIGITS)); VStopLossShort=NormalizeDouble(VStopLossShort,MarketInfo(Symbol(),MODE_DIGITS)); VTakeProfitShort=NormalizeDouble(VTakeProfitShort,MarketInfo(Symbol(),MODE_DIGITS));

// выставление ордера int ticket=OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,VTakeProfitLong,"BUY: Test",16382,0,Green);

Читаю учебник: MODE_POINT - Размер пункта в валюте котировки. Для текущего инструмента хранится в предопределенной переменной Point MODE_STOPLEVEL - Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах

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

double TakeProfit=0.1; // процент прибыли double MinLot=MarketInfo(Symbol(),MODE_MINLOT); // Минимальный размер лота double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); double VStopLossLong=Ask*(1-StopLoss/100); // стоп-лосс для лонга double VTakeProfitLong=Ask*(1+TakeProfit/100); // тейк-профит для лонга double VStopLossShort=Bid*(1+StopLoss/100); // стоп-лосс для шорта double VTakeProfitShort=Bid*(1-TakeProfit/100); // тейк-профит для шорта // проверка на минимальный уровень if (Ask-VStopLossLong<VMin) VStopLossLong=Ask-VMin; if (VTakeProfitLong-Ask<VMin) VTakeProfitLong=Ask+VMin; if (VStopLossShort-Bid<VMin) VStopLossShort=Bid+VMin; if (Bid-VTakeProfitShort<VMin) VTakeProfitShort=Bid-VMin;

VStopLossLong=NormalizeDouble(VStopLossLong,MarketInfo(Symbol(),MODE_DIGITS)); VTakeProfitLong=NormalizeDouble(VTakeProfitLong,MarketInfo(Symbol(),MODE_DIGITS)); VStopLossShort=NormalizeDouble(VStopLossShort,MarketInfo(Symbol(),MODE_DIGITS)); VTakeProfitShort=NormalizeDouble(VTakeProfitShort,MarketInfo(Symbol(),MODE_DIGITS));

// выставление ордера int ticket=OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,VTakeProfitLong,"BUY: Test",16382,0,Green);

Читаю учебник: MODE_POINT - Размер пункта в валюте котировки. Для текущего инструмента хранится в предопределенной переменной Point MODE_STOPLEVEL - Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах

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

📎📎📎📎📎📎📎📎📎📎