Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет, Младен,
Спасибо за объяснение, но что вы имеете в виду под значением первого закрытого бара? Это значение первого закрытого бара или текущего бара или после? А как же тогда значение current+0 или current+1?
с уважением,
Терранс
Терранс
MODE_MAIN означает, что вы считываете значение стохастической линии. MODE_SIGNAL означает, что вы считываете значение сигнальной линии стохастика.
Что касается SHIFT: он одинаков для всех индкаторов (даже пользовательских). Например: SHIFT=0 означает текущее значение баров, SHIFT=1 означает значение первого закрытого бара и так далее......
Терранс
Текущий бар по определению еще не является закрытым баром
Первый бар перед текущим баром является первым закрытым баром.
Привет, Младен,
Спасибо за объяснение, но что вы имеете в виду под значением первого закрытого бара? Это значение первого закрытого бара или текущего бара или после? А как же тогда значение 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);
Я правильно понимаю?
С уважением,
Терранс
Терранс
Текущий бар по определению все еще не является закрытым баром
Первый бар перед текущим баром является первым закрытым баром...
Терранс
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
Привет, Младен,
Так правильно ли я понимаю, что:
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);
Я правильно понимаю?
С уважением,
ТеррансПривет, Младен,
Спасибо за отличную помощь, как всегда!
С уважением,
Терранс
Терранс
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. Вы должны "сузить" условия, при которых можно вводить ордера, так как таким образом охватывается слишком много возможностей.
Всем привет,
Я протестировал свой код и он почти готов. У меня есть несколько вопросов, с которыми, надеюсь, вы сможете мне помочь.
Я поместил это в 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 (что происходит большую часть времени). Ваши статические переменные все еще показывают "старые" состояния, даже если они уже не действительны (они "наследуют" состояние и таким образом сигнализируют, что они выше или ниже, даже если это уже не так). Проверьте, не это ли является причиной ваших проблем
Привет, Младен,
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)