Как кодировать? - страница 270

 

IndicatorCounted и синхронизация буфера индикатора.

Здравствуйте,

Мой вопрос касается сдвига буфера в пользовательском индикаторе. Я спрашивал на другом форуме, но безрезультатно.

Например:

Код:

#define MAX_LOOK_BACK 5

#property indicator_minimum 0

#property indicator_maximum 100

#property indicator_color1 DodgerBlue

#property indicator_separate_window

double rsiBuf[];

int start()

{

int limit;

int counted_bars = IndicatorCounted();

//---- check for possible errors

if(counted_bars < 0)

return(-1);

//---- the last counted bar will be recounted

if(counted_bars > 0)

counted_bars--;

limit=Bars-counted_bars;

//---- main loop

Print("indicator limit: ", limit);

if(MAX_LOOK_BACK < limit)

limit = MAX_LOOK_BACK;

//Calculate from right to left

for(int i = 0; i < limit; i++)

{

rsiBuf = iRSI(Symbol(), NULL, 14, PRICE_CLOSE, i);

}

}

Во время работы индикатор вычисляет последние значения RSI за последние 5 баров. (Я поставил максимальное значение MAXLOOK_BACK для удобства тестирования) Если, например, в ситуации, когда limit==2 (а limit==2 часто случается в моих тестах при вызове через iCustom в советнике), то он вычислит значения баров 0 и 1 и запишет в RSI[0] и RSI[1] соответственно и не будет трогать остальной буфер. Все пользовательские индикаторы, которые я видел, написаны именно так. Не должны ли мы сдвигать буфер, если limit < MAX_LOOK_BACK ? так как это перезаписывает RSI[0] и RSI[1], но предыдущие значения этих элементов должны быть в RSI[2] и RSI[3], я прав?

Для наглядности :

Tick=0 AND limit = 5 ==> RSI[0] = 33.33 RSI[1] =44,44 RSI[2]=55,55 RSI[3]=66,66 RSI[4] = 77.77

Теперь предположим, что последние 2 значения RSI равны 88,88 и 99,99, и массив будет выглядеть следующим образом:

Tick=1 AND limit = 2 ==> RSI[0] = 88,88 RSI[1] =99.99 RSI[2]=55,55 RSI[3]=66,66 RSI[4] = 77.77

Но разве не должно быть так:

Tick=1 AND limit = 2 ==> RSI[0] = 88,88 RSI[1] =99.99 RSI[2]=33,33 RSI[3]=44,44 RSI[4] = 55.55

Разве при появлении двух новых баров мы не должны сдвигать значения предыдущего бара на 2? previousПочему все индикаторы написаны именно так и нет сдвига значений. И почему они правильно рисуют трендовые линии.

 

Я работаю над советником, который использует полосу Кельтнера для выхода из позиции (как для прибыли, так и для убытка), однако при любом усреднении с 2 лотами советник игнорирует первый вход. Есть ли какое-нибудь решение для этого, кроме входа на новом графике? Спасибо

Файлы:
 
mezarashii:
Я работаю над советником, который использует полосу Кельтнера для выхода из позиции (как для прибыли, так и для убытка), однако при любом усреднении с 2 лотами советник игнорирует первый вход. Есть ли какое-нибудь решение для этого, кроме входа на новом графике? Спасибо

Опубликуйте советника здесь.

 

Кодер пока не предоставил мне исходный код, я надеюсь, что это будет полезно само по себе. Любые отзывы будут высоко оценены.

Файлы:
 

Условное удаление с ожиданием

Я ищу скрипт или код для условного удаления.

В основном я хочу иметь возможность выполнять:

IF Ask is 200MA H1

Сохраняя все отложенные ордера открытыми/живыми ниже 200MA.

Есть идеи?

 
 
 

Получение недельных цен открытия для 10 пар одновременно

Здравствуйте, я новичок в MT4. Я пытаюсь автоматизировать свою технику, написав скрипт для одновременного доступа к недельным ценам открытия 10 пар. Я не могу использовать один советник или скрипт для доступа к недельному графику по одному. Может ли кто-нибудь подсказать мне лучший способ сделать это? Большое спасибо .....

 
novalight:
Здравствуйте, я новичок в MT4. Я пытаюсь автоматизировать свою технику, написав скрипт для одновременного доступа к недельным ценам открытия 10 пар. Я не могу использовать один советник или скрипт для доступа к недельному графику по одному. Может ли кто-нибудь подсказать мне лучший способ сделать это? Большое спасибо .....

Здравствуйте,

Вам необходимо объединить функцию iOpen.

Например, допустим, вы хотите показать в комментарии открытые цены gbpusd, eurusd и usdjpy.

тогда фрагмент кода будет выглядеть следующим образом:

double openPair1 = iOpen("EURUSD",PERIOD_W1,0);

double openPair2 = iOpen("GBPUSD",PERIOD_W1,0);

double openPair3 = iOpen("USDJPY",PERIOD_W1,0);

Comment("EURUSD weekly open: "+openPair1+\nGBPUSD weekly open: "+openPair1+"\nUSDJPY weekly open: "+openPair1);

 

Я предпочитаю иметь пары в качестве входных данных, а также 2 дополнительных входа.

Входы префикса и суффикса позволяют избежать проблем, когда брокеры добавляют что-то к основному имени пары.

extern string pair_preffix = "";

extern string pair_suffix = ""; // введите m для мини-счетов IBFX

extern string pair1 = "EURUSD;

extern string pair2 = "GBPUSD;

extern string pair3 = "USDJPY";

string myPair1, myPair2, myPair3;

int init()

{

myPair1 = pair_prefix + pair1 + pair_suffix;

myPair2 = pair_prefix + pair2 + pair_suffix;

myPair3 = pair_prefix + pair3 + pair_suffix;

return(0);

}

int start()

{

double openPair1 = iOpen(myPair1, PERIOD_W1,0);

double openPair2 = iOpen(myPair2, PERIOD_W1,0);

double openPair3 = iOpen(myPair3, PERIOD_W1,0);

Comment(pair1 + "weekly open: "+openPair1+"\n" + pair2 + " weekly open: "+openPair2+"\n" + pair3 " " weekly open: "+openPair3);

}

Конечно, я бы использовал массивы для этого при использовании 10 пар.

Роберт Хилл aka MrPip

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