Помощь в кодировании - страница 100

 
dasssi:
mladen

Во-первых, я надеюсь, что ты больше не сердишься на меня...

У меня вторая ошибка при попытке загрузить советника.

dasssi

Попробуйте переименовать советник (из-за французской буквы в названии он может вызвать у вас проблему - никакая другая проблема не может быть причиной этого, поскольку это очень простой советник).

 

спасибо, теперь работает.

не очень хорошо выглядит в тестере стратегий

 
dasssi:
спасибо, теперь он работает/не выглядит хорошо в тестере стратегий

Это просто пример того, как индикатор должен вызываться из ea, когда дело доходит до сигналов. Это далеко не полный советник (посмотрите на новые советники в разделе elite и advanced и сравните код - вы поймете, что я имею в виду). Так что это была просто помощь After-rage в решении его проблемы кодирования

 

Спасибо!!! Он хорошо работает для входа в позиции. Я не знаю, почему мой советник не работает, но это не имеет значения. Я попытался добавить код для закрытия ордеров, но он тоже не работает. Странно, потому что я взял код, похожий на структуру для позиций на вход, и я просто удвоил объем лота. Не могли бы вы взглянуть?

Файлы:
 
After-rage:
Спасибо !!! Это хорошо работает для входа в позицию. Я не знаю, почему мой советник не работает, но это не имеет значения. Попробовал добавить код для закрытия ордеров, но он тоже не работает. Странно, потому что я взял код, похожий на структуру для позиций на вход, и я просто удвоил объем лота. Не могли бы вы взглянуть?

After-rage

Один из способов сделать это (закрыть открытый ордер при изменении сигнала) находится в коде сейчас

Файлы:
 

Большое спасибо! Все работает очень хорошо. Я буду работать над этим и посмотрю, почему я был неправ.

 

Кто-нибудь знает, можно ли изменить настройки индикатора по времени исполнения через код? Например, я хотел бы иметь CCI, период которого равен ATR, так что когда ATR изменяется, период CCI также изменяется... как инициировать индикатор на каждом новом баре... Проблема в том, что я не знаю, как переинициализировать индикатор через код... Я пытался вызвать init(), когда открыт новый бар, и период меняется правильно, но индикатор не обновляется... значение последнего бара правильное, но я хочу, чтобы весь индикатор перерисовывался в соответствии с новыми настройками... Надеюсь, я понятно объяснил... Спасибо.

 
AtApi:
Кто-нибудь знает, можно ли изменить настройки индикатора на время исполнения через код? Например, я хотел бы иметь CCI, период которого равен ATR, так что когда ATR меняется, период CCI тоже меняется... как бы инициировать индикатор на каждом новом баре... Проблема в том, что я не знаю, как переинициализировать индикатор через код... Я пытался вызвать init(), когда открыт новый бар, и период меняется правильно, но индикатор не обновляется... значение последнего бара правильное, но я хочу, чтобы весь индикатор перерисовывался в соответствии с новыми настройками... Надеюсь, я понятно объяснил... Спасибо.

Если вы хотите перерисовать все значения indi, просто установите счетчик главного цикла в начале на Bars-1 и рассчитайте значения с новыми настройками.

 

Спасибо mladen за быстрый ответ...

пожалуйста, взгляните на этот пример:

extern int IndicatorPeriod = 10;

extern int AtrPeriod= 10;

extern bool DynamicPeriod = TRUE;

int init()

{

if (DynamicPeriod)

{

double atr = NormalizeDouble(100*iATR(0,0,AtrPeriod,0),0);

IndicatorPeriod = atr;

}

}

int start()

{

datetime lastBarOpenTime;

datetime thisBarOpenTime = Time[0];

if (DynamicPeriod)

{

if(thisBarOpenTime != lastBarOpenTime)

{

lastBarOpenTime = thisBarOpenTime;

init();

}

}

int i,counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

// is this what you are talking about?

int limit=MathMin(Bars-counted_bars,Bars-1);

for(i=limit; i>=0; i--) //MAIN LOOP

{

wherever calculation

}

}

 
AtApi:
Спасибо mladen за быстрый ответ...

пожалуйста, посмотрите этот пример:

extern int IndicatorPeriod = 10;

extern int AtrPeriod= 10;

extern bool DynamicPeriod = TRUE;

int init()

{

if (DynamicPeriod)

{

double atr = NormalizeDouble(100*iATR(0,0,AtrPeriod,0),0);

IndicatorPeriod = atr;

}

}

int start()

{

datetime lastBarOpenTime;

datetime thisBarOpenTime = Time[0];

if (DynamicPeriod)

{

if(thisBarOpenTime != lastBarOpenTime)

{

lastBarOpenTime = thisBarOpenTime;

init();

}

}

int i,counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

// is this what you are talking about?

int limit=MathMin(Bars-counted_bars,Bars-1);

for(i=limit; i>=0; i--) //MAIN LOOP

{

wherever calculation

}

}

AtApi

Если вы хотите сохранять значения в буфер (одно значение на точное время для данного бара), то да, это правильный способ. Но если вы хотите, чтобы все бары были "перерисованы", то установите linit всегда равнымBars-1.