Испытываю трудности с отправкой заказов. - страница 3

 
Похоже, что CT Trade - это она и есть.
 
Ему не нравится динамический размер лота? Он работает с торговлей ct, когда я использую фиксированный размер лота.
 
MetaNt:
Ему не нравится динамический размер лота? Он работает с торговлей ct, когда я использую фиксированный размер лота.

CTrade - это обертка для OrderSend().

Вы написали, что он не работает с лотом 0.07 или даже 1. Как вы это определяете? Lot=0.07 ?

 
angevoyageur:

CTrade - это обертка для OrderSend().

Вы написали, что он не работает с лотом 0.07 или даже 1. Как вы это определяете? Лот=0.07?

Я не был уверен, правильно ли я написал Mqlrequest и Mqlresult, поэтому я использовал CTrade вместо этого, я обнаружил, что он работает, если я использую фиксированные объемы, и теперь я обнаружил, что я могу умножать фиксированные объемы на целые числа, но если я пытаюсь изменить объемы с помощью дробей, я получаю ошибки, такие как invalid lotize, результат измененного размера лота печатается с ошибкой[invalid volume].
 
Это десятичные числа определенной сложности, я попробую нормализовать двойные.
 
MetaNt:
Это десятичные числа определенной сложности, я попробую normalize double.
Normalize double - это исправление для сложных десятичных дробей, я попробую его на своем динамическом лоте.
 
MetaNt:
Функция Normalize double предназначена для исправления сложных десятичных дробей, я попробую ее на моем динамическом лоте.

Исправлено.

Похоже, это был один из моих масштабных коэффициентов из некоторых уравнений, которые лежат за пределами CT Buy/Sell. Это не было проблемой, с которой я сталкивался в mql4, поэтому мне потребовалось время, чтобы найти ее, мне придется следить за этим, если mql4 обновится снова.

Если у кого-то еще возникла эта проблема, используйте 2 для цифровой части функции NormalizeDouble().

 

007, говорите?

Возможно, вам следует спросить мистера Бонда ;-)

 

Похоже, я столкнулся с той же проблемой. Я подтвердил, что размер лота соответствует требованиям SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX и SYMBOL_VOLUME_STEP.

Например, я получаю следующее:

2014.04.07 14:49:35 2014.04.04 16:00:00 CTrade::OrderSend: instant sell 0.53 EURUSD at 1.36934 sl: 1.37434 tp: 1.35934 [invalid volume]

Во время бэктестинга советника с этим символом и этими спецификациями:


Вот код, который я использую для отправки ордера:

int    losses=1;
int    DecimalPoints=2;
 double Risk=0.03;
double Inc=0.1;
my_symbol=Symbol();
leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
contract=SymbolInfoDouble(my_symbol,SYMBOL_TRADE_CONTRACT_SIZE);
min_lot=SymbolInfoDouble(my_symbol,SYMBOL_VOLUME_MIN);
max_lot=SymbolInfoDouble(my_symbol,SYMBOL_VOLUME_MAX);
trade_size=equity*(Risk/100)*leverage;
trade_size/=contract;
trade_size+=losses*Inc;
NormalizeDouble(trade_size,DecimalPoints);
  if(trade_size<min_lot)
    {
     trade_size=min_lot;
    }
  else if(trade_size>max_lot)
    {
     trade_size=max_lot;
    }
trade.Sell(trade_size,my_symbol,price,0,price-tp,"Expert Sell");

EDIT:

Конечно, я могу вручную размещать сделки с таким же размером лота.

 
Candles:

Похоже, я столкнулся с той же проблемой. Я подтвердил, что размер лота соответствует требованиям SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX и SYMBOL_VOLUME_STEP.

Например, я получаю следующее:

2014.04.07 14:49:35 2014.04.04 16:00:00 CTrade::OrderSend: instant sell 0.53 EURUSD at 1.36934 sl: 1.37434 tp: 1.35934 [invalid volume]

Во время бэктестинга советника с этим символом и этими спецификациями:


Вот код, который я использую для отправки ордера:

EDIT:

Конечно, я могу вручную размещать сделки с таким же размером лота.

Эта строка не имеет эффекта:

NormalizeDouble(trade_size,DecimalPoints);

Вы должны повлиять на результат в переменную, см. документацию NormalizeDouble.

trade_size=NormalizeDouble(trade_size,DecimalPoints);