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

 

Привет, Младен,

Спасибо за объяснение, но что вы имеете в виду под значением первого закрытого бара? Это значение первого закрытого бара или текущего бара или после? А как же тогда значение current+0 или current+1?

с уважением,

Терранс

mladen:
Терранс

MODE_MAIN означает, что вы считываете значение стохастической линии. MODE_SIGNAL означает, что вы считываете значение сигнальной линии стохастика.

Что касается SHIFT: он одинаков для всех индкаторов (даже пользовательских). Например: SHIFT=0 означает текущее значение баров, SHIFT=1 означает значение первого закрытого бара и так далее...
 

...

Терранс

Текущий бар по определению еще не является закрытым баром

Первый бар перед текущим баром является первым закрытым баром.

tkuan77:
Привет, Младен,

Спасибо за объяснение, но что вы имеете в виду под значением первого закрытого бара? Это значение первого закрытого бара или текущего бара или после? А как же тогда значение current+0 или current+1?

с уважением,

Терранс
 

Привет, Младен,

Правильно ли я понимаю, что:

current+0 - это то же самое, что и значение 0,

current+1 то же самое, что и значение 1,

current+2 - то же самое, что и значение 2,

и так далее..... для SHIFT?

Например:

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); это то же самое, что iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1);

Я правильно понимаю?

С уважением,

Терранс

mladen:
Терранс

Текущий бар по определению все еще не является закрытым баром

Первый бар перед текущим баром является первым закрытым баром
 

...

Терранс

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 0); является текущим

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1); является первым закрытым (предыдущим)

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); самая старая на графике.

PS: в этом посте у вас есть больше информации о барах: https: //www.mql5.com/en/forum/173124

tkuan77:
Привет, Младен,

Так правильно ли я понимаю, что:

current+0 - это то же самое, что и значение 0,

current+1 то же самое, что и значение 1,

current+2 равно значению 2,

и так далее..... для SHIFT?

Например:

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); это то же самое, что iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1);

Я правильно понимаю?

С уважением,

Терранс
 

Привет, Младен,

Спасибо за отличную помощь, как всегда!

С уважением,

Терранс

mladen:
Терранс

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 0); является текущим

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1); является первым закрытым (предыдущим)

...

...

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); является самым старым на графике.

PS: в этом посте вы можете найти больше информации о барах: https: //www.mql5.com/en/forum/173124
 

Несколько проблем

Привет всем,

Я протестировал свой код и он почти готов. У меня есть несколько вопросов, с которыми, надеюсь, вы сможете мне помочь.

Я поместил это в int init():

if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alert("ERROR- INSUFFICIENT BARS TO CALCULATE SMA ON DAILY CHART");

return(0);

}

SlowMAPeriod равен 200. Когда я делаю бэктест с 01.01.2009, он выдает эту ошибку, хотя на моем графике четко видно, что есть достаточно баров для расчета 200SMA с 2008 года. Может быть, я что-то упустил?

2. Я заключаю сделки на графике H4, но только в направлении дневного тренда. Я строю значения с помощью следующего кода:

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Затем, когда я ищу длинную позицию, я ссылаюсь на нее, используя:

if (FastMACurrent > SlowMACurrent && ... etc ... ).

Правильно ли это, поскольку, похоже, это не фильтрует мои сделки должным образом?

3. Я также использую фильтр тренда на графике H4, принимая длинные позиции только тогда, когда цена превысила предыдущий максимум за последние 120 периодов (и затем остается выше минимума за 120 периодов). Я использую следующий код:

Donchian_Low = Low;

Donchian_High = High;

static bool UpTrend = FALSE;

static bool DownTrend = FALSE;

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}

Затем я использую следующий код (скажем, для длинных позиций):

if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... и т.д. ... )

Но, похоже, это не работает, потому что, когда я проверяю свой бэктест графика против канала Дончиана с периодом 120, он не привязывается. Есть идеи?

Заранее спасибо.

 

...

1. Поместите его в начало функции start(). Init ненадежен, когда речь идет о данных типа Bars.

2. Это условие истинно, когда FastMACurrent > SlowMACurrent. Это то, что вы хотели, или, может быть, вы ищете крестики-нолики?

3. Возможно, это связано с пунктом 2. Вы должны "сузить" условия, при которых можно вводить ордера, так как таким образом охватывается слишком много возможностей.

crsnape@btinternet.com:
Всем привет,

Я протестировал свой код и он почти готов. У меня есть несколько вопросов, с которыми, надеюсь, вы сможете мне помочь.

Я поместил это в int init():

if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)

{

Alert("ERROR- INSUFFICIENT BARS TO CALCULATE SMA ON DAILY CHART");

return(0);

}

SlowMAPeriod равен 200. Когда я делаю бэктест с 01.01.2009, он выдает эту ошибку, хотя на моем графике четко видно, что есть достаточно баров для расчета 200SMA с 2008 года. Я что-то упускаю?

2. Я заключаю сделки на графике H4, но только в направлении дневного тренда. Я строю значения с помощью следующего кода:

SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Затем, когда я ищу длинную позицию, я ссылаюсь на нее, используя:

if (FastMACurrent > SlowMACurrent && ... etc ... ).

Правильно ли это, поскольку, похоже, это не фильтрует мои сделки должным образом?

3. Я также использую фильтр тренда на графике H4, принимая длинные позиции только тогда, когда цена превысила предыдущий максимум за последние 120 периодов (и затем остается выше минимума за 120 периодов). Я использую следующий код:

Donchian_Low = Low;

Donchian_High = High;

static bool UpTrend = FALSE;

static bool DownTrend = FALSE;

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}

Затем я использую следующий код (скажем, для длинных позиций):

if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... и т.д. ... )

Но, похоже, это не работает, потому что, когда я проверяю свой бэктест графика против канала Дончиана с периодом 120, он не привязывается. Есть идеи?

Заранее спасибо.
 

Привет, Младен,

1. Хорошо.

2. Да, верно, я не хочу входить от креста, просто использую его для фильтра длинных/коротких позиций на более краткосрочных графиках, например, если быстрая MA выше медленной MA на дневном графике, я хочу, чтобы он рассматривал только длинные позиции на графике H4. Я думаю, что я все правильно закодировал?

3. Не уверен, что понимаю, что вы имеете в виду, но я поместил это в init start()

static bool UpTrend = FALSE;

static bool DownTrend = FALSE;

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}

Должен ли я поместить статические переменные bool в самое начало, чтобы сделать их глобальными? Может ли это быть причиной?

 

...

3. Что происходит, когда Ask Donchian_Low (что происходит большую часть времени). Ваши статические переменные все еще показывают "старые" состояния, даже если они уже не действительны (они "наследуют" состояние и таким образом сигнализируют, что они выше или ниже, даже если это уже не так). Проверьте, не это ли является причиной ваших проблем

crsnape@btinternet.com:
Привет, Младен,

1. OK.

2. Да, это верно, я не хочу входить от креста, просто использую его для фильтра длинных/коротких позиций на более краткосрочных графиках, например, если быстрая MA выше медленной MA на дневном графике, я хочу, чтобы он рассматривал только длинные позиции на графике H4. Я думаю, что я все правильно закодировал?

3. Не уверен, что понимаю, что вы имеете в виду, но я поместил это в init start()

static bool UpTrend = FALSE;

static bool DownTrend = FALSE;

if (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}

if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}

Должен ли я поместить статические переменные bool в самое начало, чтобы сделать их глобальными? Может ли это быть причиной?
 

Хорошая мысль. Я посмотрю.

Вопрос о функциях, можно ли вызывать функцию внутри функции? Например, у меня есть такая функция:

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

if (... etc

Позже я вызываю ее:

double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)

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