[РЕШЕНО]OrderCalcMargin и проблема с ним связанная. - страница 2

 
fxsaber:

Убрать эту проверку.

Править стандартную библиотеку? При следующем обновлении она восстановится и невзначай получим то что и было.

В общем-то нестандартных решений найти можно. Но хотелось-бы понять возможную причину по которой OrderCalcMargin считает, что маржа равна нулю.

 
Нужен исходник, как получено то, что видно в логах.
 
Alexey Viktorov:

Править стандартную библиотеку?

Не использовать совсем. Там косяков море.

ЗЫ Исправить такие проблемы в ней и переименовать.

 
Stanislav Korotky:
Нужен исходник, как получено то, что видно в логах.

Что из распечатки вызывает подозрение?

 
Alexey Viktorov:

Что из распечатки вызывает подозрение?

Нет ни подозрений, ни мыслей, потому что нужно видеть, как получены цифры. Распечатка имеет смысл только когда прикладывается к исходнику.

 
Alexey Viktorov:

Править стандартную библиотеку? При следующем обновлении она восстановится и невзначай получим то что и было.

В общем-то нестандартных решений найти можно. Но хотелось-бы понять возможную причину по которой OrderCalcMargin считает, что маржа равна нулю.

Без кода трудно понять, где именно собака порылась.

На вскидку - проверка if(margin > 0 && freeMargin-margin > 0)  - "не Ice" для отложек.

У многих брокеров маржа для отложек нулевая. В частности, у Roboforex-Demo

А Вы как раз проверяете условие для отложки ORDER_TYPE_BUY_LIMIT

Странно то, что как Вы говорите, на MetaQuotes все нормально. Там тоже для отложки маржа должна быть равна 0.

Может у Вас на этом десятом советнике настройки стоят отличные от других? Или версия другая..

Вот лог OrderCalMargin для GBPJPY 1 лот MetaQuotes-Demo:

MetaQuotes-Demo

Что еще не понятно у Вас в распечатке:

2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       GBPJPY.m m_orderType ORDER_TYPE_BUY
2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       GBPJPY.m lots 0.1
2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       GBPJPY.m price 151.045
2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       GBPJPY.m freeMargin 9869.780000000001 margin 0.0
2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       Alert: Not enough money for ORDER_TYPE_BUY_LIMIT 0.1 GBPJPY.m Error code=0

типы ордеров не совпадают для открываемого ордера и проверяемого

 
Stanislav Korotky:

Нет ни подозрений, ни мыслей, потому что нужно видеть, как получены цифры. Распечатка имеет смысл только когда прикладывается к исходнику.

freeMargin = AccountInfoDouble(ACCOUNT_MARGIN_FREE); 

Все остальные для функции OrderCalcMargin входящие.

calculateMargin(double lots, ENUM_ORDER_TYPE orderType, double price, double & freeMargin, double & margin)

Выделенное в другом месте не вычисляется. Вставлено исключительно для возврата значений.

 
Kirill Belousov:

Без кода трудно понять, где именно собака порылась.

На вскидку - проверка if(margin > 0 && freeMargin-margin > 0)  - "не Ice" для отложек.

У многих брокеров маржа для отложек нулевая. В частности, у Roboforex-Demo

А Вы как раз проверяете условие для отложки ORDER_TYPE_BUY_LIMIT

Странно то, что как Вы говорите, на MetaQuotes все нормально. Там тоже для отложки маржа должна быть равна 0.

Может у Вас на этом десятом советнике настройки стоят отличные от других? Или версия другая..

Это учтено. В функцию OrderCalcMargin подаётся тип ордера ORDER_TYPE_BUY или ORDER_TYPE_SELL

Да и напомню, работает 10 экземпляров советника на семи символах. В том числе на GBPJPY на двух счетах. На одном счёте по указанному символу нет проблемы, а на другом уже четыре недели, то-есть четыре раза одно и то-же. Да и на других символах этого-же счёта тоже нет проблем.

 
Alexey Viktorov:

Это учтено. В функцию OrderCalcMargin подаётся тип ордера ORDER_TYPE_BUY или ORDER_TYPE_SELL

Да и напомню, работает 10 экземпляров советника на семи символах. В том числе на GBPJPY на двух счетах. На одном счёте по указанному символу нет проблемы, а на другом уже четыре недели, то-есть четыре раза одно и то-же. Да и на других символах этого-же счёта тоже нет проблем.

Что еще не понятно у Вас в распечатке:

2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       GBPJPY.m m_orderType ORDER_TYPE_BUY
2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       GBPJPY.m lots 0.1
2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       GBPJPY.m price 151.045
2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       GBPJPY.m freeMargin 9869.780000000001 margin 0.0
2017.10.02 03:59:58.952 Lazy_Locker (GBPJPY.m,H1)       Alert: Not enough money for ORDER_TYPE_BUY_LIMIT 0.1 GBPJPY.m Error code=0

типы ордеров не совпадают для открываемого ордера и проверяемого

 
Kirill Belousov:

Что еще не понятно у Вас в распечатке:

типы ордеров не совпадают для открываемого ордера и проверяемого

Потому, что Alert из другого места. А в функцию точно поступает или ORDER_TYPE_BUY или ORDER_TYPE_SELL

И в настройках всё одно и то-же. Даже магики одинаковые.