Минимально допустимый уровень стоп-лосса/тейк-профита - страница 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 - Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах
получается, чтобы получить минимальное значение в валюте котировки, надо минимально допустимый уровень стоп-лосса/тейк-профита в пунктах умножить на размер пункта в валюте котировки, что я и сделал.