во первых ДЦ как правило не затирают (технически могут, но я про такие случае не слышал), а дописывают в комент свою информацию. Как и в 4-ке. Если места в коменте не хватит, то часть будет затёрта. Ну так и не надо писать в коментариях "Войну и мир"
во вторых отдельным ордерам в 5-ке нужен только до TradeTransaction - чтобы там было проще разобраться откуда чего взялось. Если нетинговый счёт, то коменту с этого момента можно сказать прощай :-)
Да я много и не собираюсь писать. Время + цена. А вы много неттинговых счетов видели на форексе?))
Maxim Kuznetsov:
А вообще коментарии используются при перезапуске или переезде советника. Или при работе советника с "помощником". Или привязки к своей базе там пишутся. И в прочих случаях :-)
Я в комментарий типично пишу время получения сигнала, чтобы по логам можно было оценить время от получения сигнала до исполнения соотв.приказа
Каким боком переезд ассоциируется с временем получения сигнала, чтобы по логам можно было оценить время от получения сигнала до исполнения соотв.приказа ))
Да я много и не собираюсь писать. Время + цена. А вы много неттинговых счетов видели на форексе?))
ну пишите в глобальные переменные терминала, вот нашел у себя на работе часть библиотеки для записи в глобальные переменные
//____________________________________________________________________________________void WriteGV(int magic_,string name_,double value){
string s = StringConcatenate(Symbol(),magic_,name_);
if(GlobalVariableSet(s,value)==0) Print(__FUNCTION__,"Ошибка записи № ",GetLastError());
}
//____________________________________________________________________________________void WriteGV(int magic_,string name_,bool value){
string s = StringConcatenate(Symbol(),magic_,name_);
double res = 0;
if(value) res = 1.0; else res = -1.0;
if(GlobalVariableSet(s,res)==0) Print(__FUNCTION__,"Ошибка записи № ",GetLastError());
}
//____________________________________________________________________________________bool ReadGV(int magic_,string name_,double &value){
string s = StringConcatenate(Symbol(),magic_,name_);
if(!GlobalVariableCheck(s)) return(false);
value = GlobalVariableGet(s);
return(true);}
//____________________________________________________________________________________bool ReadGV(int magic_,string name_,int &value){
string s = StringConcatenate(Symbol(),magic_,name_);
if(!GlobalVariableCheck(s)) return(false);
value = int(GlobalVariableGet(s));
return(true);}
//____________________________________________________________________________________bool ReadGV(int magic_,string name_,bool &value){
GetLastError();
string s = StringConcatenate(Symbol(),magic_,name_);
if(!GlobalVariableCheck(s)) return(false);
double res= GlobalVariableGet(s);
if(res>0) value = true; else{if(res<0) value = false;else {Print(__FUNCTION__,"Ошибка чтения №",GetLastError());return(false);}}
return(true);}
//____________________________________________________________________________________void DellAllGV(int magic_){
GlobalVariablesDeleteAll(StringConcatenate(Symbol(),magic_));}
пишите в имя переменной тестовую часть, а в значение что считаете нужным, компилятор прекрасно находит функции на соотвествие типам, если сигнал отменен, то удаляйте из глобальных переменных - вмоем примере это DellAllGV(int magic_) - для Ваше задачи это некий паттерн, ну используйте уникальные мена переменных - в Вашем случае текст комментария
ну пишите в глобальные переменные терминала, вот нашел у себя на работе часть библиотеки для записи в глобальные переменные
пишите в имя переменной тестовую часть, а в значение что считаете нужным, компилятор прекрасно находит функции на соотвествие типам, если сигнал отменен, то удаляйте из глобальных переменных - вмоем примере это DellAllGV(int magic_) - для Ваше задачи это некий паттерн, ну используйте уникальные мена переменных - в Вашем случае текст комментария
В принципе, это как бы вариант, хотя, опять-таки, можно писать данные в файл. Все данные как-бы в структуре то будут хранится, например, а паралельно хоть даже по таймер писать данные в файл и всё. Но вот всё-таки не очень мне это нравится. Так получается что можно было бы нативно выбрать ордера соответствующие сигналу и с ними что-то делать. А так вместо того, что бы ордера выбрать мы будет проверять то, что имеется в глобальных переменных. Вроде бы суть таже, но..
В принципе, это как бы вариант, хотя, опять-таки, можно писать данные в файл. Все данные как-бы в структуре то будут хранится, например, а паралельно хоть даже по таймер писать данные в файл и всё. Но вот всё-таки не очень мне это нравится. Так получается что можно было бы нативно выбрать ордера соответствующие сигналу и с ними что-то делать. А так вместо того, что бы ордера выбрать мы будет проверять то, что имеется в глобальных переменных. Вроде бы суть таже, но..
с записью в файл вариант, но в тестере стратегий может подклинивать во время оптимизации, этим и хороши глобальные переменные терминала - в тестере не будут тормозить как с файлами
с записью в файл вариант, но в тестере стратегий может подклинивать во время оптимизации, этим и хороши глобальные переменные терминала - в тестере не будут тормозить как с файлами
Так можно прописать что в тестере запись в файлы не шла. Структура все равно будет ровно крутиться. Зачем нужна эта запись.
Так можно прописать что в тестере запись в файлы не шла. Структура все равно будет ровно крутиться. Зачем нужна эта запись.
Ну так это само собой разумеется. Я так всегда и делаю. Тока вот этот момент домозгую и реализую. Я к подобным вещам привередливо очень отношусь т.к. потом проще всё обслуживать, когда всё грамотно продуманно. Не хочется с каждым ботов переписывать что-то. Лучше перемусолить обслуживающие коды, что бы потом эти вещи применялись всегда в любой ситуации.
Ну так если ДЦ не удаляет, а дописывает комментарии, то можно отличить комментарий ДЦ от своих по ключевым словам. Если ключевое слово присутствует, то комментарий подпортили, ищем информацию в глобальных переменных, если нет, то работаем с комментариями.
Если ДЦ дописывает свои записи в конец комментария (я не знаю, как это на самом деле, не торгую на форексе), то можно в конце писать ключевое слово, означающее конец пользовательского комментария. Если оно пропало - то комментарий испортили.
Ну так если ДЦ не удаляет, а дописывает комментарии, то можно отличить комментарий ДЦ от своих по ключевым словам. Если ключевое слово присутствует, то комментарий подпортили, ищем информацию в глобальных переменных, если нет, то работаем с комментариями.
Если ДЦ дописывает свои записи в конец комментария (я не знаю, как это на самом деле, не торгую на форексе), то можно в конце писать ключевое слово, означающее конец пользовательского комментария. Если оно пропало - то комментарий испортили.
То комментарий испортили, что дальше делать хз... Так? Не практично. Я думаю, нужно сделать типа хэштэбла. Ассоциация данных с неким ключом. Тока вот в мт мне не нравится реализация обработки данных. Хотя, для теста сойдёт. Дальше нужно писать иначе.
string comm = "Это коментарий к ордеру и к сигналу";
int TICKET=OrderSend(Symbol(),OP_BUY, Lot, Price,Slippage,SL,TP,comm,magic_,0,col);
if(TICKET==-1)Print("Ошибка № ",GetLastError()," при открытии ордера"); else mycomment.Set(TICKET,comm);
нужно добавить методы сохранения в файл и сохранять после выставления ордера в файл и не сохранять в файл при работе в тестере стратегий
ЗЫ: по уму нужно взять класс CArrayString и переписать под свою задачу, задача довольно простая
во первых ДЦ как правило не затирают (технически могут, но я про такие случае не слышал), а дописывают в комент свою информацию. Как и в 4-ке. Если места в коменте не хватит, то часть будет затёрта.
Ну так и не надо писать в коментариях "Войну и мир"
во вторых отдельным ордерам в 5-ке нужен только до TradeTransaction - чтобы там было проще разобраться откуда чего взялось. Если нетинговый счёт, то коменту с этого момента можно сказать прощай :-)
Да я много и не собираюсь писать. Время + цена. А вы много неттинговых счетов видели на форексе?))
А вообще коментарии используются при перезапуске или переезде советника. Или при работе советника с "помощником". Или привязки к своей базе там пишутся. И в прочих случаях :-)
Я в комментарий типично пишу время получения сигнала, чтобы по логам можно было оценить время от получения сигнала до исполнения соотв.приказа
Каким боком переезд ассоциируется с временем получения сигнала, чтобы по логам можно было оценить время от получения сигнала до исполнения соотв.приказа ))Да я много и не собираюсь писать. Время + цена. А вы много неттинговых счетов видели на форексе?))
ну пишите в глобальные переменные терминала, вот нашел у себя на работе часть библиотеки для записи в глобальные переменные
пишите в имя переменной тестовую часть, а в значение что считаете нужным, компилятор прекрасно находит функции на соотвествие типам, если сигнал отменен, то удаляйте из глобальных переменных - вмоем примере это DellAllGV(int magic_) - для Ваше задачи это некий паттерн, ну используйте уникальные мена переменных - в Вашем случае текст комментария
ну пишите в глобальные переменные терминала, вот нашел у себя на работе часть библиотеки для записи в глобальные переменные
пишите в имя переменной тестовую часть, а в значение что считаете нужным, компилятор прекрасно находит функции на соотвествие типам, если сигнал отменен, то удаляйте из глобальных переменных - вмоем примере это DellAllGV(int magic_) - для Ваше задачи это некий паттерн, ну используйте уникальные мена переменных - в Вашем случае текст комментария
В принципе, это как бы вариант, хотя, опять-таки, можно писать данные в файл. Все данные как-бы в структуре то будут хранится, например, а паралельно хоть даже по таймер писать данные в файл и всё. Но вот всё-таки не очень мне это нравится. Так получается что можно было бы нативно выбрать ордера соответствующие сигналу и с ними что-то делать. А так вместо того, что бы ордера выбрать мы будет проверять то, что имеется в глобальных переменных. Вроде бы суть таже, но..
В принципе, это как бы вариант, хотя, опять-таки, можно писать данные в файл. Все данные как-бы в структуре то будут хранится, например, а паралельно хоть даже по таймер писать данные в файл и всё. Но вот всё-таки не очень мне это нравится. Так получается что можно было бы нативно выбрать ордера соответствующие сигналу и с ними что-то делать. А так вместо того, что бы ордера выбрать мы будет проверять то, что имеется в глобальных переменных. Вроде бы суть таже, но..
с записью в файл вариант, но в тестере стратегий может подклинивать во время оптимизации, этим и хороши глобальные переменные терминала - в тестере не будут тормозить как с файлами
с записью в файл вариант, но в тестере стратегий может подклинивать во время оптимизации, этим и хороши глобальные переменные терминала - в тестере не будут тормозить как с файлами
Так можно прописать что в тестере запись в файлы не шла. Структура все равно будет ровно крутиться. Зачем нужна эта запись.
Так можно прописать что в тестере запись в файлы не шла. Структура все равно будет ровно крутиться. Зачем нужна эта запись.
Ну так это само собой разумеется. Я так всегда и делаю. Тока вот этот момент домозгую и реализую. Я к подобным вещам привередливо очень отношусь т.к. потом проще всё обслуживать, когда всё грамотно продуманно. Не хочется с каждым ботов переписывать что-то. Лучше перемусолить обслуживающие коды, что бы потом эти вещи применялись всегда в любой ситуации.
Ну так если ДЦ не удаляет, а дописывает комментарии, то можно отличить комментарий ДЦ от своих по ключевым словам. Если ключевое слово присутствует, то комментарий подпортили, ищем информацию в глобальных переменных, если нет, то работаем с комментариями.
Если ДЦ дописывает свои записи в конец комментария (я не знаю, как это на самом деле, не торгую на форексе), то можно в конце писать ключевое слово, означающее конец пользовательского комментария. Если оно пропало - то комментарий испортили.
Ну так если ДЦ не удаляет, а дописывает комментарии, то можно отличить комментарий ДЦ от своих по ключевым словам. Если ключевое слово присутствует, то комментарий подпортили, ищем информацию в глобальных переменных, если нет, то работаем с комментариями.
Если ДЦ дописывает свои записи в конец комментария (я не знаю, как это на самом деле, не торгую на форексе), то можно в конце писать ключевое слово, означающее конец пользовательского комментария. Если оно пропало - то комментарий испортили.
То комментарий испортили, что дальше делать хз... Так? Не практично. Я думаю, нужно сделать типа хэштэбла. Ассоциация данных с неким ключом. Тока вот в мт мне не нравится реализация обработки данных. Хотя, для теста сойдёт. Дальше нужно писать иначе.
вот набросал на соседнем форуме, код в принципе работающий, но нужно немного проверок добавить
вызов:
нужно добавить методы сохранения в файл и сохранять после выставления ордера в файл и не сохранять в файл при работе в тестере стратегий
ЗЫ: по уму нужно взять класс CArrayString и переписать под свою задачу, задача довольно простая
Вы хотите сказать, что на платформу МТ5 нельзя полагаться?
Ну дописывать же ДЦ в комментарий может.