И снова про публикацию в маркете - Volume limit reached - страница 2

 

Dmytryi Voitukhov:

Вызов - рекурсия с шаговым уменьшением. До выполнения условия. Предельно прозрачно. 

возможно показать эту часть кода ? как вы реализовали рекурсию в мт ?
или это просто предельно прозрачные "панты" и словоблудие ?

 

Не бог весть что, но какой-то результат есть. 

USDCHF, USDJPY. Депо от 200. Принимаю критику.

Файлы:
 

...'double margin,free_margin=AccountInfoDouble' ....

...'if (margin>free_magin)'...

?

 
Aleksandr Morozov:

...'double margin,free_margin=AccountInfoDouble' ....

...'if (margin>free_magin)'...

?

1 - согласен. Исправлено пол дня назад. Спасибо за конструктив.

2 - ну как бэ... если так - то выполнить декремент лота и снова проверить. Или я неверно понял вопрос. Тогда уточните. 

 

Ну вам же блин по журналу написано

...'
   if(!OrderCalcMargin(type,symb,lots,price,margin

))'...


операция сравнения. Если ШТО не равно OrderCalcMargin

?????? ппц
 
Aleksandr Morozov:

Ну вам же блин по журналу написано

...'
   if(!OrderCalcMargin(type,symb,lots,price,margin

))'...


операция сравнения. Если ШТО не равно OrderCalcMargin

?????? ппц

Я снова чего-то не понял. 

Сравнение - 

free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE)

с margin, полученным здесь:

OrderCalcMargin(type,symb,lots,price,margin)

И отмечу - после 'double margin,free_margin=AccountInfoDouble' .... у margin затем другое значение. Тем более что ранее сделал раздельную инициализацию. Но это не помогло. Локально - норм. В маркете - failed instant buy 2.75 EURUSD at 1.09287 [Volume limit reached]. 

Не нахожу в журналах:

...'
   if(!OrderCalcMargin(type,symb,lots,price,margin

))'...


Теперь так:

double CheckVolume(string symb,double lots,ENUM_ORDER_TYPE type)
  {
//--- получим цену открытия
oldlot=lots;
   MqlTick mqltick;
   SymbolInfoTick(symb,mqltick);
   double price=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   if(type==ORDER_TYPE_SELL)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- значения необходимой и свободной маржи
   double margin=0;
   double free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   //--- вызовем функцию проверки
OrderCalcMargin(type,symb,lots,price,margin);
     while(margin>free_margin && lots>0) 
  { 
lots=lots-SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
OrderCalcMargin(type,symb,lots,price,margin);
  }
//--- проверка прошла успешно
double Min_Lot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
double Step=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
lots=NormalizeDouble(MathFloor(lots / SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)) * SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),MathMax(CountSignedDigits(Min_Lot),CountSignedDigits(Step)));
double volume_limit=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_LIMIT);
if(SumLotAll>volume_limit && volume_limit>0) 
lots=0;
if(oldlot<lots || lots<Min_Lot) 
lots=0; // костыль
   return(lots);
  }
 

'lots=NormalizeDouble(MathFloor(lots / SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)) * SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),MathMax(CountSignedDigits(Min_Lot),CountSignedDigits(Step)));'

возможно тут проблема

 
Aleksandr Morozov:

'lots=NormalizeDouble(MathFloor(lots / SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)) * SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),MathMax(CountSignedDigits(Min_Lot),CountSignedDigits(Step)));'

возможно тут проблема

Если б с объёмами была какая-то проблема - тест не прошел бы по первым двум парам.

test on EURUSD,H1 (hedging)
strategy tester report 16 total trades
test on XAUUSD,D1 (hedging)
strategy tester report 18 total trades
test on GBPUSD,M30 (hedging)
 2019.02.01 00:00:30   failed instant sell 10 GBPUSD at 1.31101 [Volume limit reached]
 2019.02.01 00:01:00   failed instant sell 10 GBPUSD at 1.31055 [Volume limit reached]
 2019.02.01 00:02:00   failed instant sell 10 GBPUSD at 1.30997 [Volume limit reached]
 2019.02.01 00:03:00   failed instant sell 10 GBPUSD at 1.30965 [Volume limit reached]
 2019.02.01 00:04:00   failed instant sell 10 GBPUSD at 1.30998 [Volume limit reached]
 2019.02.01 00:05:00   failed instant sell 10 GBPUSD at 1.30997 [Volume limit reached]
 2019.02.01 00:06:00   failed instant sell 10 GBPUSD at 1.31072 [Volume limit reached]
 2019.02.01 00:07:00   failed instant sell 10 GBPUSD at 1.31060 [Volume limit reached]
 2019.02.01 00:08:00   failed instant sell 10 GBPUSD at 1.31060 [Volume limit reached]
 2019.02.01 00:09:00   failed instant sell 10 GBPUSD at 1.31061 [Volume limit reached]
 2019.02.01 00:10:00   failed instant sell 10 GBPUSD at 1.31060 [Volume limit reached]
 2019.02.01 00:11:00   failed instant sell 10 GBPUSD at 1.31056 [Volume limit reached]
 2019.02.01 00:12:00   failed instant sell 10 GBPUSD at 1.31056 [Volume limit reached]
 2019.02.01 00:13:30   failed instant sell 10 GBPUSD at 1.31069 [Volume limit reached]
 2019.02.01 00:14:00   failed instant sell 10 GBPUSD at 1.31069 [Volume limit reached]
 2019.02.01 00:15:00   failed instant sell 10 GBPUSD at 1.31065 [Volume limit reached]
 2019.02.01 00:16:00   failed instant sell 10 GBPUSD at 1.31062 [Volume limit reached]
 2019.02.01 00:17:00   failed instant sell 10 GBPUSD at 1.31057 [Volume limit reached]
 2019.02.01 00:18:00   failed instant sell 10 GBPUSD at 1.31041 [Volume limit reached]
 2019.02.01 00:19:00   failed instant sell 10 GBPUSD at 1.31026 [Volume limit reached]
 2019.02.01 00:20:00   failed instant sell 10 GBPUSD at 1.31032 [Volume limit reached]
there are no trading operations

 Вот что странно. Крайне не информативный лог маркета.

 
Я понимаю что вы хотите сделать в этой строке, но не понимаю зачем. У вас как лоты открываются? После запятой цифр нет?
 
Как обратить на себя внимание разрабов? Чтоб не тыкаться бессмысленно носом в стену как слепому котенку а получить короткий точный ответ.
Причина обращения: