Скорее всего, блок ММ советника увеличивает или уменьшает изначальный размер лота (в зависимости от текущего размера депозита) в недопустимое (например - дробное) число раз для данного ДЦ
Попробуйте в СВОЙСТВАХ отключить ММ и работать постоянным лотом.
я даже так делал:
double L=0; //максимально возможный объем для открытия позиции на данный момент //код вычисления размера лота в зависимости от обстоятельств :) double LotStep=MarketInfo(Symbol(),24); //MODE_LOTSTEP Шаг изменения размера лота //грануляция объема: double N=L/LotStep; //делим полученный объем на минимальный шаг лота. Возможно, получено нецелое число. Неверная грануляция объема. int Z=MathFloor(N); //целое количество минимальных шагов в нашем лоте L=Z*LotStep; //грануляция объема соответствует требованиям ДЦ
я даже так делал:
Для полноты картины хорошо бы проверить соответствие размера лота на минимальное и максимальное значение: MarketInfo с идентификаторами запроса
MODE_MINLOT и MODE_MAXLOT
Хотя из кода видно, что Вы пытаетесь открыть позицию с нулевым объемом:
double L=0; //максимально возможный объем для открытия позиции на данный момент
я даже так делал:
В основном все размеры лота - это степени 10-ки .... можно и так - по принципу армии: безобразно, но однообразно )))))))
mnLotSz = MarketInfo(nSYMBOL,MODE_MINLOT); mnLotStp = MarketInfo(nSYMBOL,MODE_LOTSTEP); nLotsDigits = MathCeil(MathAbs(MathLog(MathMin(mnLotSz,mnLotStp)))/MathLog(10)); ...................................... Lots = NormalizeDouble(Lots,nLotsDigits);
Удачи.
В основном все размеры лота - это степени 10-ки .... можно и так - по принципу армии: безобразно, но однообразно )))))))
Удачи.
Для полноты картины хорошо бы проверить соответствие размера лота на минимальное и максимальное значение: MarketInfo с идентификаторами запроса
MODE_MINLOT и MODE_MAXLOT
Хотя из кода видно, что Вы пытаетесь открыть позицию с нулевым объемом:
Вы долго думали, прежде чем такое сказать? DDDD
в серединке есть однозначная строчка коммента: //код вычисления размера лота в зависимости от обстоятельств :)
которая недвусмысленно поясняет, что рабочая часть кода где-то там... (на моем компе, например, или туда можно усердно запихать что-нибудь свое - главное, чтобы оно было впихуемое!)
и, кстати, проверка на макс и мин у меня также имеется - просто здесь я её не озвучивал.
Вы долго думали, прежде чем такое сказать? DDDD
в серединке есть однозначная строчка коммента: //код вычисления размера лота в зависимости от обстоятельств :)
которая недвусмысленно поясняет, что рабочая часть кода где-то там... (на моем компе, например, или туда можно усердно запихать что-нибудь свое - главное, чтобы оно было впихуемое!)
и, кстати, проверка на макс и мин у меня также имеется - просто здесь я её не озвучивал.
Я вообще не думал. Увидел...
А у меня такое решение.
По методу Черепах.)) Риск менеджмент присутствует !
double capitalKoeficient = 1; double unitProcent = 2; int ATRPeriod = 20; double lotStoimostShaga = MarketInfo(Symbol(), MODE_TICKVALUE); double lotMinSize = MarketInfo(Symbol(), MODE_MINLOT); double lotMaxSize = MarketInfo(Symbol(), MODE_MAXLOT); double lotMinStep = MarketInfo(Symbol(), MODE_LOTSTEP); if (lotStoimostShaga <= 0) return(0); /// Эт типа если ничего не известно, то нечего и делать. double riskVolatilnost = NormalizeDouble(iATR(NULL, 0, ATRPeriod, 1), Digits); double riskVValute = riskKoeficient * lotStoimostShaga * riskVolatilnost / Point; double capitalVUpravlenii = AccountEquity() * capitalKoeficient; double unitVValute = capitalVUpravlenii * unitProcent / 100; double unitLotSize = unitVValute / riskVValute; if (unitLotSize < lotMinSize) { unitLotSize = 0; } else { int k = MathFloor((unitLotSize - lotMinSize) / lotMinStep); unitLotSize = lotMinSize + lotMinStep * k; if (unitLotSize > lotMaxSize) unitLotSize = lotMaxSize; } /// Ну а при посылке сигнала на открытие: если размер лота равен нулю /// выдает алерт мол: сигнал есть но риск менеджмент не позволяет)))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования