Что не так?
Попробуйте вывести на экран значение ваших переменных margin и free_margin
Есть функция проверки маржи (прилагается).
Но периодически по паре GBPUSD вылетает ошибка:
2018.11.19 22:06:38.196 Core 1 2014.01.07 13:05:40 current account state: Balance: 649.22, Credit: 0.00, Commission: 0.00, Accumulated: 0.00, Assets: 0.00, Liabilities: 0.00, Equity 662.10, Margin: 460.11, FreeMargin: 201.99
Сама функция:
Требуется выставить стоп-ордер.
Что не так?
а как у вас получаются разные значения одновременно?
а как у вас получаются разные значения одновременно?
bool CheckMoneyForTrade(string symb,double lots,double price,ENUM_ORDER_TYPE type) { //--- значения необходимой и свободной маржи double margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE); //--- вызовем функцию проверки if(!OrderCalcMargin(type,symb,lots,price,margin)) { //--- что-то пошло не так, сообщим и вернем false Print("Error in ",__FUNCTION__," code=",GetLastError()); return(false); } //--- если не хватает средств на проведение операции if(margin>=free_margin) { //--- сообщим об ошибке и вернем false Print("No money for ",EnumToString(type)," ",free_margin," ",margin); return(false); } Print("OK ",EnumToString(type)," ",margin," ",free_margin); //--- проверка прошла успешно return(true); }
Модификация ордера:
2018.12.02 20:17:51.431 Core 1 2014.04.28 09:40:40 OK ORDER_TYPE_BUY_STOP 0.0 96.08
// Функция проверила возможность установки BUY_STOP. Маржа = 0, свободная маржа = 96.08. Дальше;
2018.12.02 20:17:51.431 Core 1 2014.04.28 09:40:40 order modified [#61 buy stop 0.08 GBPUSD.m at 1.68255]
// Бот пишет, что ордер модифицирован. Дальше тестер:
2018.12.02 20:17:51.431 Core 1 2014.04.28 09:55:40 current account state: Balance: 353.42, Credit: 0.00, Commission: 0.00, Accumulated: 0.00, Assets: 0.00, Liabilities: 0.00, Equity 381.10, Margin: 268.86, FreeMargin: 112.24
Дальше опять все хорошо:
2018.12.02 20:17:51.431 Core 1 2014.04.28 09:55:40 OK ORDER_TYPE_BUY_STOP 0.0 112.24
Функция одобряет установку ордера, бот размещает BUY_STOP.
В чем дело?
Модификация ордера:
2018.12.02 20:17:51.431 Core 1 2014.04.28 09:40:40 OK ORDER_TYPE_BUY_STOP 0.0 96.08
// Функция проверила возможность установки BUY_STOP. Маржа = 0, свободная маржа = 96.08. Дальше;
2018.12.02 20:17:51.431 Core 1 2014.04.28 09:40:40 order modified [#61 buy stop 0.08 GBPUSD.m at 1.68255]
// Бот пишет, что ордер модифицирован. Дальше тестер:
2018.12.02 20:17:51.431 Core 1 2014.04.28 09:55:40 current account state: Balance: 353.42, Credit: 0.00, Commission: 0.00, Accumulated: 0.00, Assets: 0.00, Liabilities: 0.00, Equity 381.10, Margin: 268.86, FreeMargin: 112.24
Дальше опять все хорошо:
2018.12.02 20:17:51.431 Core 1 2014.04.28 09:55:40 OK ORDER_TYPE_BUY_STOP 0.0 112.24
Функция одобряет установку ордера, бот размещает BUY_STOP.
В чем дело?
Дело в том, что Вы ищете не под тем фонарем. Судя по принтам все вычисления текущей маржи и маржи после исполнения отложенного ордера вычисляются в функции OrderCalcMargin(). Именно она Вам пишет, что не хватит маржи для исполнения отложенного ордера. А Вы эти сообщения игнорируете. У меня получается, что плечо у Вас 1:100.
При срабатывании отложника и открытии позиции, тестер-терминал с матюками удаляет ордер.
Прописал удаление одного ордера при открытии позиции, но по стратегии происходит модификация ордеров и случаются два ордера по одной цене, и советник уже не может удалить второй ордер, т к он уже на сервере.
Вопрос: как в этом случае решить вопрос с проверкой средств?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть функция проверки маржи (прилагается).
Но периодически по паре GBPUSD вылетает ошибка:
2018.11.19 22:06:38.196 Core 1 2014.01.07 13:05:40 current account state: Balance: 649.22, Credit: 0.00, Commission: 0.00, Accumulated: 0.00, Assets: 0.00, Liabilities: 0.00, Equity 662.10, Margin: 460.11, FreeMargin: 201.99
Сама функция:
Требуется выставить стоп-ордер.
Что не так?