#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()に入れるべき
コンパイラの警告を 個別に無効化できるかどうかご存知の方はいらっしゃいますか?
でないと
"「○○○○」の宣言でグローバル変数を隠す"
いい加減にしろ
コンパイラの警告を 個別に無効化できるかどうかご存知の方はいらっしゃいますか?
でないと
"「○○○○」の宣言でグローバル変数を隠す"
がうざい...。
できない
本項
をOnTimer()に入れるべき
どうもありがとうございました。この状態の仕組みがわかったような気がします。残念ながら、OnTimer()関数の 処理に関する情報はほとんどないのですが、1つだけヒントを見つけ、その条件がうまくいきました。しかし、その機能がミリ秒単位で動作するのであれば、すべてのメモリを無駄にすることはないのでしょうか?
これが、私が手に入れたものです。
どうもありがとうございました。この状態の仕組みがわかったような気がします。残念ながら、OnTimer()関数との 連携に関する情報はほとんどないのですが、1つだけヒントを見つけ、その条件がうまくいきました。しかし、この関数はミリ秒単位で起動しても、メモリをオーバーロードしない のでしょうか?
こんな感じです。
それはないだろう...としたほうがいい。
が得点にならない...。としたほうがいい。
ありがとうございました。
が得点にならない...。としたほうがいい
そして、このようにするのが良いのです。
あるいは、もっといい方法があります。
ある記事を見つけ、自分用に作り直すことにした。しかし、私の手は間違った場所にあるため、何が間違っていたのか、アドバイスを頂きたい。
参考にした記事はこちら -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);
per」ではなく、「rsi」を間違えて比較しているのです。