небольшой свечной советник

 

            
 
blade_runner:

Не без помощи людей с этого форума, написал советник, но он работает немного не так, как я хочу

...

 Помогите пожалуйста, спасибо

1. Строки вычисления высоты свечей имеет смысл всунуть также в if(newBar()) - эти данные не меняются на каждом тике.

2. Зачем вкладывать проверку if(newBar()) внутрь if(newBar())??? Какой в этом смысл?

3.  ArrayResize() не обнуляет массив, то есть на следующем баре в массиве будут старые данные, которые ниже по коду частично перезапишутся, а часть их останется, если ордеров будет уже меньше. Да и зачем писать тикеты в массив, если они и так доступны после OrderSelect(), непонятно. Как так получается вообще закрыть ордер без того, чтобы его предварительно выбрать с помощью OrderSelect()???

4. Потратьте немного времени, чтобы запринтовать в журнал передаваемые торговым функциям значения, да и код ошибки не мешало бы, сильно упрощает отлавливание ошибок в логике кода, не надо лениться. Компилятор ловит только грубые ошибки в синтаксисе, а логику работы программы не проверит никто, кроме программиста. 

 
evillive:

1. Строки вычисления высоты свечей имеет смысл всунуть также в if(newBar()) - эти данные не меняются на каждом тике.

2. Зачем вкладывать проверку if(newBar()) внутрь if(newBar())??? Какой в этом смысл?

3.  ArrayResize() не обнуляет массив, то есть на следующем баре в массиве будут старые данные, которые ниже по коду частично перезапишутся, а часть их останется, если ордеров будет уже меньше. Да и зачем писать тикеты в массив, если они и так доступны после OrderSelect(), непонятно. Как так получается вообще закрыть ордер без того, чтобы его предварительно выбрать с помощью OrderSelect()???

4. Потратьте немного времени, чтобы запринтовать в журнал передаваемые торговым функциям значения, да и код ошибки не мешало бы, сильно упрощает отлавливание ошибок в логике кода, не надо лениться. Компилятор ловит только грубые ошибки в синтаксисе, а логику работы программы не проверит никто, кроме программиста. 

буду исправлять, спасибо
 

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

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

Что по закрытию, так и правильно не закрывает, всё как в коде, там закрытие уже существующих ордеров вбито не по новому бару, а по условиям открытия нового ордера. 

И не закрываются они, скорее всего, из-за несоответствия тикета из массива с тикетом реального ордера. OrderSelect, на минуточку, типа bool, а не int и проверяется немного не так, поройтесь в справке, посмотрите примеры, там есть много чего.



 
evillive:

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

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

Что по закрытию, так и правильно не закрывает, всё как в коде, там закрытие уже существующих ордеров вбито не по новому бару, а по условиям открытия нового ордера. 

И не закрываются они, скорее всего, из-за несоответствия тикета из массива с тикетом реального ордера. OrderSelect, на минуточку, типа bool, а не int и проверяется немного не так, поройтесь в справке, посмотрите примеры, там есть много чего.



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