Как отловить закрытый ордер, котрый брокер открыл снова? - страница 5

 
Integer:
Посмотрите в справке. Вот только функции для определения существует ли файли нет. Можно определить по ошибке при открытии файла только для чтения.

Да. Функцию по созданию нашел, а вот как определить существует такой файл или нет не понятно.

 
Andrey916:

Да. Функцию по созданию нашел, а вот как определить существует такой файл или нет не понятно.


Можно открывать файл для чтения и записи. Если файла нет, то он будет создан. После открытия читать строку, если нет записи, значит файл пустой и ордер не закрывался. При закрытии ордера писать в файл что-нибудь.
 

Функция отлова двойников.

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Проверка на дубликат ордера                                                |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCheck_Fantom (int fi_Ticket,
                    string fs_prefGV = "#")
{
    if (IsTesting()) return (false);
    string ls_Name = fs_prefGV + fi_Ticket;
//----
    if (GlobalVariableCheck (ls_Name)) return (true);
//----
    return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
А при закрытии ордера или при переборе закрытых ордеров нужно каждому тикету создавать GV-пременную и присваивать ей время закрытия ордера (или любое другое значение):
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Создание GV-переменной для ордера                                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fSet_GVForTicket (int fi_Ticket,
                       string fs_prefGV = "#")
{
    if (IsTesting()) return;
    string ls_Name = fs_prefGV + fi_Ticket;
//----
    GlobalVariableSet (ls_Name, OrderCloseTime());
//----
}

как-то так.

 
Меня все смущает один вопрос. А был ли мальчик? Может эти ордера и не закрывались из-за ошибок
 
TarasBY:

Функция отлова двойников.

А при закрытии ордера или при переборе закрытых ордеров нужно каждому тикету создавать GV-пременную и присваивать ей время закрытия ордера (или любое другое значение):

как-то так.

Понял. Спасибо!

 
Vinin:
Меня все смущает один вопрос. А был ли мальчик? Может эти ордера и не закрывались из-за ошибок

Все просто. Зайдите на сайт alpari.ru и почитайте форум. Там на эту тему много чего написано. Ордера закрывались 11.07 и были вновь открыты брокером 12.07. Обоснование переоткрытия - ордера были закрыты по не рыночным котировкам.

Там почти все сообщения от этих чисел на данную тему.

http://forum.alpari.ru/showthread.php?t=79733

 

Думаю, что вопрос решен. Тему можно закрывать.

Всем большое спасибо за помощь!

С уважением, Андрей.

 

Небольшое продолжение ...

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

Т.к. у меня советники не выставляют SL и TP, а отслеживают их динамически, то способ совсем простой.

Перед закрытием я модифицирую ордер и выставляю SL или TP равным 0.01 в зависимости от типа ордера (SELL или BUY). и тут же его закрываю.

Теперь, когда в терминале появится ордер с ненулевым значением SL или TP, я точно буду знать, что я его уже закрывал.

С уважением, Андрей.

 
Теперь, когда в терминале появится ордер с ненулевым значением SL или TP, я точно буду знать, что я его уже закрывал.

И что от этого изменится? Какая разница закрывали вы его ранее или нет, если вам нужно опять его закрывать?

Или вы просто хотите отследить событие возврата ордера в рынок чтобы "бодаться" с ДЦ?

 
Alexz:

И что от этого изменится? Какая разница закрывали вы его ранее или нет, если вам нужно опять его закрывать?

Или вы просто хотите отследить событие возврата ордера в рынок чтобы "бодаться" с ДЦ?

Т.к. в момент возврата закрытого ордера в рынок советник продолжает работать, то в терминале открыто до 50 ордеров с одинаковым ID.

Чтобы снова закрыть или обработать переоткрытый ордер, его сначала необходимо идентифицировать среди всех открытых ордеров. Именно цель его идентификации я и ставил в данной теме.

С уважением, Андрей.

Причина обращения: