Форум » Консультации по программированию » Вопросы касательно оптимизации кода » Ответить

Вопросы касательно оптимизации кода

hoz: Столкнулся с проблемой. В индикаторе есть 13 буферов. Получается, что если мне задействовать все 13 буферов, то индикатор становится длинноватый, и слишком загромождённый расчётами значений этих 13 буферов. Я что подумал. Вот кусок кода, который я хочуреализовать компактнее: [more]for (i=0; i < OctLinesCnt; i++) { buff_str = StringConcatenate ("mml", i); if (ObjectFind (buff_str) == -1) { ObjectCreate (buff_str, OBJ_HLINE, 0, Time[0], mml4 ); ObjectMove (buff_str, 0, Time[0], mml4 ); } else { ObjectMove (buff_str, 0, Time[0], mml4); } buff_str = "mml_txt"+i; if(ObjectFind (buff_str) == -1) { ObjectCreate (buff_str, OBJ_TEXT, 0, Time[mml_shft], mml_shft); ObjectSetText (buff_str, ln_txt, 8, "Arial", mml_clr); ObjectMove (buff_str, 0, Time[mml_shft], mml); } else { ObjectMove (buff_str, 0, Time[mml_shft], mml); } }[/more] Буферы вообще называются mml1... mml2... до mml13. Название я в коде уже поправил в строке: buff_str = StringConcatenate ("mml", i); Дальше вопрос стоит в местах, например, тут: [more]if (ObjectFind (buff_str) == -1) { ObjectCreate (buff_str, OBJ_HLINE, 0, Time[0], mml4 ); ObjectMove (buff_str, 0, Time[0], mml4 ); }[/more] Как-то сделать так, чтоб рисовался не только объект по цене mml4, объекты по ценам с каждого буфера от mml1 до mml13. Как это реализовать?

Ответов - 5

Scriptong: hoz пишет: Как-то сделать так, чтоб рисовался не только объект по цене mml4, объекты по ценам с каждого буфера от mml1 до mml13. Приведенный код нужно сделать функцией, а этой функции передавать ссылку на буфер: void ShowLeves(double &mml[]) { for (i=0; i < OctLinesCnt; i++) { buff_str = StringConcatenate ("mml", i); if (ObjectFind (buff_str) == -1) ObjectCreate (buff_str, OBJ_HLINE, 0, Time[0], mml[ i ] ); else ObjectMove (buff_str, 0, Time[0], mml[ i ]); buff_str = "mml_txt"+i; if(ObjectFind (buff_str) == -1) { ObjectCreate (buff_str, OBJ_TEXT, 0, Time[mml_shft], mml_shft); ObjectSetText (buff_str, ln_txt, 8, "Arial", mml_clr); } else ObjectMove (buff_str, 0, Time[mml_shft], mml[ i ]); } } И вызывать функцию для каждого буфера индикатора: ShowLevels(mml1); ShowLevels(mml2); ... ShowLevels(mml13);

skilful_coder: Привет Scriptong! Мне надо код Number of Retry Attempts for Order Execution(Количество повторных попыток для выполнения заказа). Пожалуйста помогите меня?!

Scriptong: Добрый день. Вы имеете в виду количество попыток открытия рыночного ордера? На мой взгляд, это принципиально неверный подход. Рыночный ордер нужно пытаться открывать до тех пор, пока выполняются условия для его открытия или пока ордер не будет открыт. Почему нужно ограничивать количество попыток 5-ю или 10-ю, если условия для открытия ордера продолжают действовать? Примерный алгоритм должен быть такой: 1. Определение торгового сигнала. Если есть, то фиксируется цена, по которой поступил сигнал. 2. От зафиксированной цены сигнала устанавливается (например, при помощи настроечного параметра) на сколько пунктов (или %) может отличаться цена в худшую сторону от зафиксированной для открытия ордера. 3. Если текущая рыночная цена находится в пределах заданного нами коридора или лучше, чем цена при возникновении сигнала, то даем команду на открытие рыночного ордера. 4. Если ордер не был открыт, то эксперт должен уснуть до следующего тика, ожидая перемены рыночный условий. На новом тике вновь выполняются пп. 1 - 4, проверяя необходимость открытия ордера.


skilful_coder: Ок, Большое спасибо!

Scriptong: skilful_coder пишет: Ок, Большое спасибо! Я дал общее описание. Если будут затруднения в его реализации, то приведите свой конкретный случай (код). Попробую помочь организовать его в свете предложенного мною алгоритма.



полная версия страницы