Помогите, пожалуйста, с кодом правильного расчёта объёма, а то я всё уже перебрал, да опыта у меня почти 0

 

Ребята, HELP!!! Пожалуйста, помогите с кодом правильного расчёта объёма для: 


если позиций нет:

для ордера BUYSTOP

для ордера SELLSTOP 


если профит > 0

если позиции есть BUY:

для ордера BUYSTOP

для ордера SELLSTOP

если позиции есть SELL:

для ордера BUYSTOP

для ордера SELLSTOP 


если профит < 0

если позиции есть BUY:

для ордера BUYSTOP

для ордера SELLSTOP

если позиции есть SELL:

для ордера BUYSTOP

для ордера SELLSTOP 

 
aleksandr bebishev:

Ребята, HELP!!! Пожалуйста, помогите с кодом правильного расчёта объёма для: 


если позиций нет:

для ордера BUYSTOP

для ордера SELLSTOP 


если профит > 0

если позиции есть BUY:

для ордера BUYSTOP

для ордера SELLSTOP

если позиции есть SELL:

для ордера BUYSTOP

для ордера SELLSTOP 


если профит < 0

если позиции есть BUY:

для ордера BUYSTOP

для ордера SELLSTOP

если позиции есть SELL:

для ордера BUYSTOP

для ордера SELLSTOP 

Что имеется в виду под "правильным объемом"?

 

Я написал - "правильный расчёт", а не "правильный объём" ))))

Просто иногда брокер возвращает ошибку, связанную с объёмом, ставлю "lot-1" - всё работает. Но это же коряво. (((

Поэтому и написал на форум, чтоб знающие люди помогли (((

 
aleksandr bebishev:

Я написал - "правильный расчёт", а не "правильный объём" ))))

Просто иногда брокер возвращает ошибку, связанную с объёмом, ставлю "lot-1" - всё работает. Но это же коряво. (((

Поэтому и написал на форум, чтоб знающие люди помогли (((

Покажите как рассчитываете объем и какая ошибка приходит от брокера

 
double Equity = AccountInfoDouble(ACCOUNT_EQUITY);
double GO = SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL);

Lot = (Equity*Risk)/GO;

ошибка "invalid volome"

 
aleksandr bebishev:
double Equity = AccountInfoDouble(ACCOUNT_EQUITY);
double GO = SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL);

Lot = (Equity*Risk)/GO;

ошибка "invalid volome"

Напишите так:

Lot=NormalizeDouble((Equity*Risk)/GO,2);

И возможно нужно сделать проверку:

MinLot=MarketInfo(Symbol(),MODE_MINLOT);
if (Lot<MinLot) Lot=MinLot;
 

хорошо это понятно, я так делал.

а что делать с этим?

AnomalyLot = PosVolume + Lot;

 
aleksandr bebishev:

хорошо это понятно, я так делал.

а что делать с этим?

AnomalyLot = PosVolume + Lot;

А что это?

 

это когда нужно перевернуться

 
aleksandr bebishev:

это когда нужно перевернуться

Нормализуйте  PosVolume. или все целиком