#property copyright"Copyright 2021, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window//#property indicator_separate_window // Индик. рисуется в основном окне//////////////////////////////////////////#property indicator_buffers2// Сообщаем о том, что у нас будет два буфера#property indicator_color1 Lime // Цвет стрелки для покупок#property indicator_color2 Red // Цвет стрелки для продажdouble Buy[]; // Буфер для покупокdouble Sell[]; // Буфер для продаж#define BUY 0#define SELL 1inputint per = 14;
inputint verx = 70;
inputint niz = 30;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mapping// Установим связь наших массивов с буферами индикатораSetIndexBuffer (0, Buy);
SetIndexBuffer (1, Sell);
// Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
SetIndexEmptyValue (0, 0);
SetIndexEmptyValue (1, 0);
//Определяем стиль отображения индикаторных линий - стрелка
SetIndexStyle (0, DRAW_ARROW);
SetIndexStyle (1, DRAW_ARROW);
// Установим значки "стрелки" для буферов
SetIndexArrow(0, 233); // Стрелка "вверх" для покупок
SetIndexArrow(1, 234); // Стрелка "вниз" для продаж//Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
IndicatorDigits (Digits);
//Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
IndicatorShortName ("Мой первый индикатор");
//Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
SetIndexLabel(0, "Покупаем");
SetIndexLabel(1, "Продаём");
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---// Вычислим кол-во не измененных баров с последнего вызова индикатораint counted_bars = IndicatorCounted();
int limit, signal;
//Пересчитаем последний посчитанный барif (counted_bars>0)
counted_bars-- ;
//Определяем число баров, которые следует пересчитать
limit=Bars-counted_bars;
// Чтобы индикатор "не перерисовывался" расчет ведем с последнего закрытого бара(он имеет индекс равный 1)// нулевой бар является текущим, т.е. он изменяется с каждым новым тиком до тех пор пока не будет закрытfor(int i = 2; i < limit; i++)
{
//Проверяем сигнал на вход для текущего бара
signal = Signal(i-1);
if (signal == BUY)
{
Buy[i-1] = low[i-1];
}
elseif (signal == SELL)
{
Sell[i-1] = high[i-1];
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+int Signal(int i)
{
// Снимем показания индикатораdouble Current = iRSI(NULL, 0, per, PRICE_CLOSE, i);
double Previous = iRSI(NULL, 0, per, PRICE_CLOSE, i+1);
double SCurrent = iRSI(NULL, 0, per, PRICE_CLOSE, i);
// Для предыдущего бараdouble SPrevious = iRSI(NULL, 0, per, PRICE_CLOSE, i+1);
// А теперь проверим всловия для наличия сигналов// есть сигнал на покупку?if(per >= verx && Close[1]<Open[1])
return(BUY);
if(per <= verx && Close[1]>Open[1])
return(SELL);
// Сигнала нет return(-1);
}
На этом уроке мы напишем простой индикатор, который в дальнейшем будем использовать при разработке советника. А использовать для получения сигнала мы будем уже существующие — Moving Average и MACD. Алгоритм следующий: Определять направление сделки (покупка или продажа) мы будем по индикатору Moving Average с периодом 100 на дневном...
我在这方面遇到了麻烦,我理解price1的锚点,但我不知道如何使条件。我的变体不起作用。
本节
应该放在OnTimer()中。
有谁知道是否可以禁用个别编译器警告?
否则
"'XXXX'的声明隐藏了全局变量"
困扰我...
有谁知道是否可以禁用个别编译器警告?
否则
"'XXXX'的声明隐藏了全局变量"
很烦人...
不能
本节
应该放在OnTimer()中。
非常感谢您的帮助。我想我明白了这种情况是如何运作的。不幸的是,我对处理OnTimer()函数 的信息非常少,但我找到了一个提示,而且条件可行。但是,如果该函数以毫秒为单位工作,它是否不会浪费所有的内存?
这就是我得到的东西。
非常感谢您的帮助。我想我明白这种情况是如何运作的。不幸的是,关于如何使用OnTimer()函数 的信息非常少,但我找到了一个提示,条件是可以工作。但是,如果这个函数是以毫秒为单位触发的,那么它是否不会超过内存的负荷?
这是我得到的东西。
它不会...而且最好是这样做。
将不得分...而且最好是这样做。
非常感谢您!
将不得分...而且最好是这样做
而且这样做会更好。
或者更好的是。
我发现了一篇文章,并决定重新做给我自己用。但由于我的手在错误的地方,我想听听你的意见,我做错了什么。
这是我提到的文章--http://mql.su/2017/11/lesson11-first-indicator/
我想在rsi读数的基础上制作自己的指标。
我在这个领域不是很有经验,但似乎我做错了什么 )))))))))
我不需要为我做这些,只要告诉我在什么地方和什么地方添加和替换就可以了!
我发现了一篇文章,并决定重新做给我自己用。但由于我的手在错误的地方,我想听听你的意见,我做错了什么。
这是我提到的文章--http://mql.su/2017/11/lesson11-first-indicator/
我想在rsi读数的基础上制作自己的指标。
我在这个领域不是很有经验,但似乎我做错了什么 )))))))))
你不必为我做,只需告诉我在什么地方和什么地方添加和替换就可以了!
if(per >= verx && Close[1]<Open[1]) return(BUY); if(per <= verx && Close[1]> Open[1]) return(SELL);
你比较的是错误的rsi而不是 "per"。