初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 838

 

mql4では、プログラミングを全く知らないのに、iCustomを使って、他人の既成のインジケータを利用したインジケータを作りました...。直感はもういいんです。mql5を使用していますが、いくら理解しても何も動きません。お願いします、助けてください。

ex5でこの インジケータを使用しています。ダウンロードフォルダに入れました。その両方の線を取り出して、他の期間のチャートに描きたい、つまりiCustomでマルチタイムフレームにしたいのです。

一からインジケータを書くことはできないので、簡単なBears Powerのインジケータのコードを引用しています。indicator_chart_windowとDRAW_LINEとラインを変更した以外、そこは何も変更していないのですが、私の考えでは、現在のTFのデフォルトパラメータで最初のバッファのデータを取り出せばよいのではと思います。

ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics");

すべてがコンパイルされ、何も描画されない。他に必要なものはありますか?:(

#property copyright   "2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Bears Power"
//--- indicator settings
#property indicator_chart_window                      //---------------------------------
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_LINE                 //---------------------------------------
#property indicator_color1  Silver
#property indicator_width1  2
//--- input parameters
input int InpBearsPeriod=13; // Period
//--- indicator buffers
double    ExtBearsBuffer[];
double    ExtTempBuffer[];
//--- handle of EMA 
int       ExtEmaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBearsBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtTempBuffer,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpBearsPeriod-1);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Bears("+(string)InpBearsPeriod+")");
//--- get MA handle
   ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//--- check for bars count
   if(rates_total<InpBearsPeriod)
      return(0);// not enough bars for calculation   
//--- not all data may be calculated
   int calculated=BarsCalculated(ExtEmaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtEmaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//---- get ma buffers
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)
     {
      Print("getting ExtEmaHandle is failed! Error",GetLastError());
      return(0);
     }
//--- first calculation or number of bars was changed
   if(prev_calculated<InpBearsPeriod)
      limit=InpBearsPeriod;
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
     {
      ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics"); \\--------------------------------------------
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Технический индикатор RSI ANALYTICS
Технический индикатор RSI ANALYTICS
  • レビュー: 5
  • 2013.11.01
  • STRAT ANALYTICS
  • www.mql5.com
Зачем нам RSI в отдельном окне, если его можно построить в основном окне графика, что гораздо более понятно? RSI ANALYTICS - это индикатор, следящий за рынком, созданный на основе той же идеи, что и традиционный RSI (индекс относительной силы). При этом он строится не в отдельном подокне, а в том же окне, что и график цены финансового...
 
Nilog:

mql4では、プログラミングを全く知らないのに、iCustomを使って、他人の既成のインジケータを利用したインジケータを作りました...。直感はもういいんです。mql5を使用していますが、いくら理解しても何も動きません。お願いしたいことがあります。

ex5でこの インジケータを使用しています。ダウンロードフォルダに入れました。その両方の線を取り出して、他の期間のチャートに描きたい、つまりiCustomでマルチタイムフレームにしたいのです。

一からインジケータを書くことはできないので、簡単なBears Powerのインジケータのコードを引用しています。indicator_chart_windowとDRAW_LINEとラインを変更した以外、そこは何も変更していないのですが、私の考えでは、現在のTFのデフォルトパラメータで最初のバッファのデータを取り出せばよいのではと思います。

すべてがコンパイルされ、何も描画されない。他に必要なものはありますか?:(

mql5では、カスタムおよび標準のインジケータを使用した作業は、mql4とは異なる構成になっています。mql4ではiCustomを通して1つの指標値しか取得できなかったのが、mql5では配列でヒストリーの全深さの指標値を取得することができます。2つ目の大きな違いは、インジケーターバッファのインデックスの方向性です。

すべてのコードに目を通し、オリジナルと照らし合わせるのは面倒なので、主なものだけ指摘します。

ファイルはIndicatorsフォルダまたは同じIndicatorsにあるサブフォルダ内に配置する必要があります。

以下は、MAインジケータのハンドルを取得するためのラインです。

ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);

で、これはMAインジケータの値を取得するための文字列です。

if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)

この場合、追加のバッファまたは配列になります。

カスタムインジケータのデータを取得するために、以下のことが判明しました。

ExtBearsHandle=iCustom(NULL,0,"RSI Analytics");
CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer)

そして、この追加バッファから何らかの方法でインジケータ値を処理することもできますし、インデックスの方向を忘れることなくインジケータバッファに入れることもできます。

 
Alexey Viktorov:


ありがとうございました。理解したとおりに書いたら、今はコンパイル時に1つだけエラーが出ます。ライン上

CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer);

errorto_copy - 未宣言の識別子 です。

どのセクションで、どのように宣言すればよいのでしょうか?

 
Nilog:

ありがとうございました。理解したとおりに書いたら、今はコンパイル時に1つだけエラーが出ます。ライン上

errorto_copy - 未宣言の識別子 です。

どのセクションで、どのように宣言すればよいのでしょうか?

私のヒントとあなたのコード、そしてすでに修正したソースコードを比較する必要があります。この変数は、これらのコードで宣言されています。また、私の発言に加え、クソをクソに変えるのではなく、一般的にインジケーターの構築のロジックを理解するようにしたほうがいい。

 
MetaTrader 5では、1つのEAが通貨と、例えばRTS指数とで異なる動作をすることができますか?
 
lil_lil:
MetaTrader5では、ある通貨ペアのEAのパフォーマンスが、例えばRTS指数のパフォーマンスと極端に異なることがあるのでしょうか?

参議院は、その通りに動く。それ以外でもない。

RTSは取引所であるため、会計上のポジションはネッティング方式です。EAがもともと網の上で動作するように設計されていない場合、結果は予測不可能です。

 
Vladimir Karputov:

参議院は、その通りに動く。それ以外でもない。

RTSは取引所であるため、会計上のポジションはネッティング方式です。EAがもともと網の上で動作するように設計されていない場合、結果は予測不可能です。

EAがネットで動作することを 意図していない場合、結果は予測不可能です。

この戦略には、多方向のポジションはありません。

 
lil_lil:

ありがとうございます。ネット上で動作する ように設計されているか どうかは、コードからどのように確認するのでしょうか。

戦略上、反対方向のポジションは存在しない。

そして、もしそうなら(仕事では常に1つのポジション)、ネッティングでもヘッジングでも違いはないのです。

 
Vladimir Karputov:

この場合(運用中のポジションは常にONE)、ネッティングであろうとヘッジであろうと違いはない。

通貨(FX)のリバースシグナルでは、ポジションはクローズされますが、取引所ではクローズされません。どこを見ればいいのか、何を見ればいいのか。

 
lil_lil:

通貨のリバースシグナルでは、ポジションはクローズされますが、取引所ではクローズされません。どこを見ればいいのか、何を見ればいいのか。

ポジションを 閉じるという指令が来ている場所を探すこと。

理由: