無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ビュー:
70
評価:
(4)
パブリッシュ済み:
\MQL5\Include\
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

変数の定義

まず、ファイルの最初の行を変数と配列の名前に合わせて変更する必要がある。以下では、ローソク足のオープン、クローズ、ハイ、ローを持つMqlRates変数にg_ratesを使っている。g_ratesを変数名に置き換えてください。i」はダミーの変数名で、コード内の他の変数と干渉しない。変数「i」は、使用するローソク足の番号である。例:ローソク足3の終値を使うには、CANDLECLOSE(3)を使う。


// Candle (define g_rates as: MqlRates g_rates[];)
#define  CANDLELOW(i)    g_rates[i].low
#define  CANDLEHIGH(i)   g_rates[i].high
#define  CANDLEOPEN(i)   g_rates[i].open
#define  CANDLECLOSE(i)  g_rates[i].close
#define CANDLETIME(i)   g_rates[i].time

また、以下のようにMqlTickを使ってASKとBIDの値を取得することもできますし、SymbolInfoDouble(_Symbol,SYMBOL_ASK)を呼び出すこともできます。返される値に違いはありません。

// Prices (define g_tick as: MqlTick g_tick;))
#define  ASK             g_tick.ask
#define  BID             g_tick.bid

最後に、移動平均、atr、または必要な追加配列のための配列も定義されています。例: ローソク足 1 の平均トゥルー・レンジを使用するには、ATR(1) を使用します。
重要: 配列は AsSeries であると仮定します ( 例:ArraySetAsSeries(g_MA20_arr, true);)。これは後述の#define文において重要である。

// これらの配列は次のように定義する: double g_MA20_arr[];
// 移動平均とATR
#define  MOVAVG20(i)     g_MA20_arr[i]
#define  MOVAVG40(i)     g_MA40_arr[i]
#define  MOVAVG50(i)     g_MA50_arr[i]
#define  MOVAVG200(i)    g_MA200_arr[i]
#define  ATR(i)          g_atr_arr[i]


上記のステートメントを定義したら、あとは何も変更する必要はありません。必要であれば、EAに合った#define文を追加することもできます。


キャンドル機能

ローソク足には、EAを開発する際に便利な機能があります。以下の定義名は、それらが何を表しているかを示しています。WICKはローソク足の一番上の影、TAILはローソク足の一番下の影を表します。例: 最後のローソク足のボディの真ん中の価格を取得するには、CANDLEBODYMIDDLE(1) を使用します。

// キャンドルの特徴
#define  CANDLEBODYTOP(i)      fmax(CANDLEOPEN(i),CANDLECLOSE(i))
#define  CANDLEBODYBOT(i)      fmin(CANDLEOPEN(i),CANDLECLOSE(i))
#define  CANDLEMEDIAN(i)       (0.5*(CANDLEHIGH(i)+CANDLELOW(i)))
#define  CANDLEWEIGHTED(i)     (0.25*(CANDLEHIGH(i)+CANDLELOW(i)+2*CANDLECLOSE(i)))
#define  CANDLETYPICAL(i)      (1./3.*(CANDLEHIGH(i)+CANDLELOW(i)+CANDLECLOSE(i)))
#define  CANDLEBODYMIDDLE(i)   (0.5*(CANDLEBODYTOP(i)+CANDLEBODYBOT(i)))
#define  CANDLESIZE(i)         (CANDLEHIGH(i)-CANDLELOW(i))
#define  CANDLEBODYSIZE(i)     fabs(CANDLECLOSE(i)-CANDLEOPEN(i))
#define  CANDLEWICKSIZE(i)     (CANDLEHIGH(i)-CANDLEBODYTOP(i))
#define  CANDLETAILSIZE(i)     (CANDLEBODYBOT(i)-CANDLELOW(i))

さらに、ATRを基準として2つのサイズを定義します。例:ローソク足4のATRに対する大きさを知りたい場合は、ATRCANDLESIZE(4)を使います。

#define  ATRCANDLESIZE(i)      (CANDLESIZE(i)/ATR(i))
#define  ATRCANDLEBODYSIZE(i)  (CANDLEBODYSIZE(i)/ATR(i))

また、上昇中のローソク足(close>open)は+1方向、下降中のローソク足は-1方向となる。 例: if(CANDLEDIRECTION(10)==1) Print("ローソク足10は上昇ローソク足です");

#define  CANDLEDIRECTION(i)    (CANDLECLOSE(i)>CANDLEOPEN(i)?1:(CANDLECLOSE(i)<CANDLEOPEN(i)?-1:0))

2種類の「ラン」が定義されています:UPとDOWNです。ランアップは、上昇ローソク足の終値-安値で定義され、それ以外は0です。ランダウンは、下降ローソク足の高値-終値で定義され、それ以外は0です。例として、ローソク足 3 のランアップを取得するには、CANDLERUNUP(3) を使用する。

#define  CANDLERUNUP(i)        ((CANDLECLOSE(i)>CANDLEOPEN(i))?(CANDLECLOSE(i)-CANDLELOW(i)):0)
#define  CANDLERUNDOWN(i)      ((CANDLECLOSE(i)<CANDLEOPEN(i))?(CANDLEHIGH(i)-CANDLECLOSE(i)):0)


ローソク足の特徴 お問い合わせ

これらの定義は、1つまたは複数のキャンドルの動作を示すブール変数である。長さを短くするために、以前の#defineステートメントを使用しています。

isCANDLERIGHTDIR(i,dir)は、ローソク足(i)の方向がdirと等しければ真になり、そうでなければ偽になります;

フラクタルには、5本のローソクを使うものと、3本のローソクを使うもの(弱いフラクタル)の2種類がある。以下のフラクタル#定義では、ローソク足(i)は最高値(TOP)または最安値(BOT)を持つ中央のローソク足である。5本のローソク足を使ったフラクタルでは、ローソク足i-2,i-1,i,i+1,i+2のデータがあることを確認する。また、厳密な不等式">"または"<"を使用するバリエーションや、"<="または">="を使用するバリエーションもあります。最後に、トップフラクタル(TOP)またはボトムフラクタル(BOT)を識別するための#定義があります。定義を見れば、どちらの定義を使うべきかがわかる。

is3CANDLEGAPUP(i,gap,size)は、UPギャップ(ローソク足の高値が2本後のローソク足の安値を下回る)を見つけるために使用される。ローソク足(i)は、問題の3本のローソク足のうち、最も新しいローソク足となります。ここでも、ローソク足は "AsSeries "であると仮定します。「gap "はギャップの最小価格デルタ、"size "は真ん中のローソク足のサイズの最小価格デルタです。

is3CANDLEGAPDOWN(i,gap,size)は、同じロジックを使用してDOWNギャップを見つけるために使用されます。

is3CANDLEGAPUPTREND(i,gap,size)は、is3CANDLEGAPUP(i,gap,size) と同じ ですが、3本のローソク足のうち最も古いローソク足が正の方向でなければならないという、真であるための追加条件を追加します。

isCANDLEDOJIPOINTS(i,n)とisCANDLEDOJIFRACTION(i,f)です。最初のバージョンはn*_Pointを使用し、2番目のバージョンはf*CANDLESIZE(i)を使用してローソク足が童子であるかどうか(真偽)を判断します。

例:ローソク足 20 が非厳密な(等号を使用した)フラクタル・トップかどうかを知りたい場合は isCANDLEFRACTALEQTOP(20) を使用。

ご覧のように、定義は問い合わせを圧縮したもので、EA コードをより短く、読みやすくします。

// キャンドル機能の問い合わせ (boolean)
#define  isCANDLEUP(i)               (CANDLEDIRECTION(i)==1)
#define  isCANDLEDOWN(i)             (CANDLEDIRECTION(i)==-1)
#define  isCANDLEFLAT(i)             (CANDLEDIRECTION(i)==0)
#define  isCANDLEWICKLESS(i)         (CANDLEWICKSIZE(i)==0)
#define  isCANDLETAILLESS(i)         (CANDLETAILSIZE(i)==0)
#define  isCANDLESOLID(i)            (CANDLEWICKSIZE(i)==0 && CANDLETAILSIZE(i)==0)
#define  isCANDLERIGHTDIR(i,dir)     (dir*(CANDLECLOSE(i) - CANDLEOPEN(i))>0)
#define  isCANDLEFRACTALTOP(i)       (CANDLEHIGH(i) > CANDLEHIGH(i-1) && CANDLEHIGH(i-1) > CANDLEHIGH(i-2) && CANDLEHIGH(i) > CANDLEHIGH(i+1) && CANDLEHIGH(i+1) > CANDLEHIGH(i+2))
#define  isCANDLEFRACTALBOT(i)       (CANDLELOW(i) < CANDLELOW(i-1) && CANDLELOW(i-1) < CANDLELOW(i-2) && CANDLELOW(i) < CANDLELOW(i+1) && CANDLELOW(i+1) < CANDLELOW(i+2))
#define  isCANDLEFRACTALEQTOP(i)     (CANDLEHIGH(i) >= CANDLEHIGH(i-1) && CANDLEHIGH(i-1) >= CANDLEHIGH(i-2) && CANDLEHIGH(i) >= CANDLEHIGH(i+1) && CANDLEHIGH(i+1) >= CANDLEHIGH(i+2))
#define  isCANDLEFRACTALEQBOT(i)     (CANDLELOW(i) <= CANDLELOW(i-1) && CANDLELOW(i-1) <= CANDLELOW(i-2) && CANDLELOW(i) <= CANDLELOW(i+1) && CANDLELOW(i+1) <= CANDLELOW(i+2))
#define  isCANDLEWEAKFRACTALTOP(i)   (CANDLEHIGH(i) > CANDLEHIGH(i-1) && CANDLEHIGH(i) > CANDLEHIGH(i+1))
#define  isCANDLEWEAKFRACTALBOT(i)   (CANDLELOW(i) < CANDLELOW(i-1) && CANDLELOW(i) < CANDLELOW(i+1))
#define  isCANDLEWEAKFRACTALEQBOT(i) (CANDLELOW(i) <= CANDLELOW(i-1) && CANDLELOW(i) <= CANDLELOW(i+1))
#define  isCANDLEWEAKFRACTALEQTOP(i) (CANDLEHIGH(i) >= CANDLEHIGH(i-1) && CANDLEHIGH(i) >= CANDLEHIGH(i+1))
#define  is3CANDLEGAPUP(i,gap,size)  (CANDLELOW(i)-CANDLEHIGH(i+2)>gap && CANDLEBODYSIZE(i+1)>=size)
#define  is3CANDLEGAPDOWN(i,gap,size) (CANDLELOW(i+2)-CANDLEHIGH(i)>gap && CANDLEBODYSIZE(i+1)>=size)
#define  is3CANDLEGAPUPTREND(i,gap,size)  (CANDLELOW(i)-CANDLEHIGH(i+2)>gap && CANDLEBODYSIZE(i+1)>=size &&  isCANDLEUP(i+2))
#define  is3CANDLEGAPDOWNTREND(i,gap,size) (CANDLELOW(i+2)-CANDLEHIGH(i)>gap && CANDLEBODYSIZE(i+1)>=size &&  isCANDLEDOWN(i+2))
#define  isCANDLEDOJIPOINTS(i,n)     (CANDLEBODYSIZE(i) <= n*_Point)
#define  isCANDLEDOJIFRACTION(i,f)   (CANDLEBODYSIZE(i) <= f*CANDLESIZE(i))


数学関数と演算

ここで、EA で役立つ数学関数と演算をいくつか定義します。そのうちのいくつかは私が開発したEAに特有なものですが、お望みであれば変更したり削除したりしてもかまいません。

BRACKET(x,minV,maxV)は、区間[minV,maxV]内のxの値を返します。これは EA の入力変数をボックス制約するのに便利です。

CONVEXCOMB(a,x1,x2) は, x1 と x2 の凸の組み合わせを a*x1+x2 として返す.この関数は、x1 と x2 の中間の値を計算するときに便利であるが、平均値(a=0.5)以上の値が必要である。

EVALLINE(x,x1,y1,x2,y2,ymin,ymax) は2点[x1,y1]と[x2,y2]で定義される直線の評価である。xで評価されると、[ymin,ymax]に括られた値が返される。

MAPAB11(x,A,B)は値xを括弧[A,B]から括弧[-1,1]にマップする。MAP11AB(x,A,B)は、値xをブラケット[-1,1]からブラケット[A,B]にマップする。これら2つの関数は、[-1,1]の範囲で正規化された変数を扱うのに便利である。

最後の4つの関数は私のEAで使われているもので、必ずしもすべての人に汎用的に役立つとは限りませんが、念のため残しておきました。

#define  BRACKET(x,minV,maxV)                 (x<minV?minV:(x>maxV?maxV:x))
#define  CONVEXCOMB(a,x1,x2)                  (a*x1+(1.0-a)*x2)
#define  EVALLINE(x,x1,y1,x2,y2,ymin,ymax)    BRACKET((y2-y1)/(x2-x1)*(x-x1)+y1,ymin,ymax)
#define  MAPAB11(x,A,B)                       (2./(B-A)*(BRACKET(x,A,B)-A)-1.)
#define  MAP11AB(x,A,B)                       ((B-A)/2.*(BRACKET(x,-1,1)-1)+B)
#define  SIGMOID(x,a)                         (1.0/(1.0 + exp(-a*x)))
#define  NN1(x,w,b)                           (w*x+b)
#define  EVALPOLY(X,X0,X1,Y0,Y1,EX,ymin,ymax) BRACKET(Y1*pow((X-X0)/(X1-X0),EX)+Y0,ymin,ymax)
#define  EVALPOLY2P(X,X0,X1,Y0,Y1,EX,ymn,ymx) BRACKET((Y1-Y0)*pow((X-X0)/(X1-X0),EX)+Y0,ymn,ymx)


また、関数や操作として、(傾きの代用として)差の計算があります。

MA20DIFF(i,n)は、n本のローソク足で区切られた20期間の移動平均の2つの値の差を出します。残りの関数も同じロジックに従います。例:ローソク足3本目と13本目の200期間移動平均の差を計算するには、MA200DIFF(3,10)を使います。

#define  MA20DIFF(i,n)                        (MOVAVG20(i)-MOVAVG20(i+n))
#define  MA40DIFF(i,n)                        (MOVAVG40(i)-MOVAVG40(i+n))
#define  MA50DIFF(i,n)                        (MOVAVG50(i)-MOVAVG50(i+n))
#define  MA200DIFF(i,n)                       (MOVAVG200(i)-MOVAVG200(i+n))
#define  CANDLECLOSEDIFF(i,n)                 (CANDLECLOSE(i)-CANDLECLOSE(i+n))
#define  CANDLEOPENDIFF(i,n)                  (CANDLEOPEN(i)-CANDLEOPEN(i+n))
#define  CANDLEHIGHDIFF(i,n)                  (CANDLEHIGH(i)-CANDLEHIGH(i+n))
#define  CANDLELOWDIFF(i,n)                   (CANDLELOW(i)-CANDLELOW(i+n))
#define  CANDLEMEDIANDIFF(i,n)                (CANDLEMEDIAN(i)-CANDLEMEDIAN(i+n))
#define  CANDLEWEIGHTEDDIFF(i,n)              (CANDLEWEIGHTED(i)-CANDLEWEIGHTED(i+n))
#define  CANDLETYPICALDIFF(i,n)               (CANDLETYPICAL(i)-CANDLETYPICAL(i+n))
#define  CANDLEBODYMIDDLEDIFF(i,n)            (CANDLEBODYMIDDLE(i)-CANDLEBODYMIDDLE(i+n))

問い合わせも数学的関数として含まれています。括弧と凸は以下でチェックされます。

#define  isINBRACKET(x,minV,maxV)             (x<=maxV && x>=minV)
#define  isINBRACKETSTRICT(x,minV,maxV)       (x<maxV && x> minV)
#define  isOUTBRACKET(x,minV,maxV)            (x>=maxV || x<=minV)
#define  isOUTBRACKETSTRICT(x,minV,maxV)      (x> maxV || x< minV)
#define  isCONVEX(yl,yc,yr)                   (yl>=yc && yc<=yr)
#define  isCONCAVE(yl,yc,yr)                  (yl<=yc && yc>=yr)
#define  isCONVEXTSTRICT(yl,yc,yr)            (yl>yc && yc<yr)
#define  isCONCAVESTRICT(yl,yc,yr)            (yl<yc && yc> yr)


定数

私はいくつかの定数を定義している。それを使うかどうかはあなたの自由です。

// 定数
#define  PIVALUE                              (M_PI)
#define  MINSTOPPOINTS                        (30)
#define  MINFREEZEPOINTS                      (30)
#define  STOPLEVEL                            (fmax(MINSTOPPOINTS,(double)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL))*_Point)
#define  FREEZELEVEL                          (fmax(MINFREEZEPOINTS,(double)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL))*_Point)


デバッグ

熟練したプログラマーなら誰でも、コードをデバッグするための最良のツールがPrint文であることを知っています。以下の定義では、プログラムのあちこちにPrint文を設定し、デバッグのレベルに応じてPrint文のON/OFFを切り替えることができます。

まず、#define DEBUG_LEVEL0、#define DEBUG_LEVEL1、 または#define DEBUG_LEVEL 2を使用して、デバッグのレベルを定義する必要がありますDEBUG_LEVEL0 を使用すると、メタトレーダー 5 ターミナルのジャーナルタブには何も表示されません。DEBUG_LEVEL1 を使用すると、PRINTVARn ステートメントのみがアクティブになり、Journal タブに印刷されます。DEBUG_LEVEL2 では、PRINTVARn ステートメントとVPRINTVARn ステートメントの両方がジャーナルタブに表示されます。DEBUG_LEVEL2はVPRINTVARnを 使用した "V "erboseの場合です。

PRINTVARnはn個の変数を表示します。例えば、i,x,zを表示したい場合は、PRINTVAR3(i,x,z); 文字列を表示したい場合は、PRINTTEXT("任意の文字列"); を使用します。プリントアウトには、関数名とPRINTVARn文が挿入されているファイルの行番号が含まれます。

// プリントを使ったデバッグ 
// コードの冒頭で、デバッグ・レベルx={0,1,2}を次のように定義する:#define DEBUG_LEVELx 
#ifdef  DEBUG_LEVEL0
#define  PRINTTEXT(text)
#define  PRINTVAR(x1)
#define  PRINTVAR1(x1)
#define  PRINTVAR2(x1,x2)
#define  PRINTVAR3(x1,x2,x3)
#define  PRINTVAR4(x1,x2,x3,x4)
#define  PRINTVAR5(x1,x2,x3,x4,x5)
#define  PRINTVAR6(x1,x2,x3,x4,x5,x6)

#define  VPRINTTEXT(text)
#define  VPRINTVAR(x1)
#define  VPRINTVAR1(x1)
#define  VPRINTVAR2(x1,x2)
#define  VPRINTVAR3(x1,x2,x3)
#define  VPRINTVAR4(x1,x2,x3,x4)
#define  VPRINTVAR5(x1,x2,x3,x4,x5)
#define  VPRINTVAR6(x1,x2,x3,x4,x5,x6)

#endif
                                                                                                
#ifdef  DEBUG_LEVEL1
#define  PRINTTEXT(text)           Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :",text)
#define  PRINTVAR(x1)              Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  PRINTVAR1(x1)             Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  PRINTVAR2(x1,x2)          Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2))
#define  PRINTVAR3(x1,x2,x3)       Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3))
#define  PRINTVAR4(x1,x2,x3,x4)    Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4))
#define  PRINTVAR5(x1,x2,x3,x4,x5) Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5))
#define  PRINTVAR6(x1,x2,x3,x4,x5,x6) Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5),", " #x6 + "=", (x6))

#define  VPRINTTEXT(text)
#define  VPRINTVAR(x1)
#define  VPRINTVAR1(x1)
#define  VPRINTVAR2(x1,x2)
#define  VPRINTVAR3(x1,x2,x3)
#define  VPRINTVAR4(x1,x2,x3,x4)
#define  VPRINTVAR5(x1,x2,x3,x4,x5)
#define  VPRINTVAR6(x1,x2,x3,x4,x5,x6)
#endif

#ifdef   DEBUG_LEVEL2
#define  PRINTTEXT(text)           Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :",text)
#define  PRINTVAR(x1)              Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  PRINTVAR1(x1)             Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  PRINTVAR2(x1,x2)          Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2))
#define  PRINTVAR3(x1,x2,x3)       Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3))
#define  PRINTVAR4(x1,x2,x3,x4)    Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4))
#define  PRINTVAR5(x1,x2,x3,x4,x5) Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5))
#define  PRINTVAR6(x1,x2,x3,x4,x5,x6) Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5),", " #x6 + "=", (x6))

#define  VPRINTTEXT(text)           Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :",text)
#define  VPRINTVAR(x1)              Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  VPRINTVAR1(x1)             Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  VPRINTVAR2(x1,x2)          Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2))
#define  VPRINTVAR3(x1,x2,x3)       Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3))
#define  VPRINTVAR4(x1,x2,x3,x4)    Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4))
#define  VPRINTVAR5(x1,x2,x3,x4,x5) Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5))
#define  VPRINTVAR6(x1,x2,x3,x4,x5,x6) Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5),", " #x6 + "=", (x6))
#endif


MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/56149

Download all ticks of a symbol's history Download all ticks of a symbol's history

マーケットウォッチ内のすべてのシンボルについて、ブローカーからすべてのティックをダウンロードします。 利用可能な場合は、すべての履歴または過去の特定の日付までをダウンロードします。

MACDカラーヒストグラム MACDカラーヒストグラム

MACDカラーヒストグラムは、古典的なMACD(移動平均収束ダイバージェン ス)インディケータの改良版で、市場のモメンタムをより明確かつ直感的 に視覚的に分析できるように設計されています。このインディケータは、伝統的なMACDの機能と、MACDラインとシグナ ル・ラインの関係に基づいて色が変化するダイナミック・ヒストグラムを組み合 わせており、トレーダーは市場のトレンド、反転ポイント、優柔不断の瞬間を素早く 識別することができます。

Self Optimized SMA Self Optimized SMA

このインディケータは2本の線を描画します。下 線 は 、上 昇 し た 直 近 の SMA期間に基づいて計算されます。上側の線は、下降した直近のSMA期間に基づいて計算されます。

Auto SL TP by Risk Reward Ratio Auto SL TP by Risk Reward Ratio

Auto SL TP by Risk Reward Ratioスクリプトは、リスク管理プロセスを合理化したいMetaTrader 5トレーダーのために設計されたシンプルで強力なツールです。このスクリプトは、ユーザーが定義したリスク:リワード比率とストップロス(pips)に基づき、オープンポジションのストップロス(SL)とテイクプロフィット(TP)レベルを設定するプロセスを自動化します。初心者であろうと経験豊富なトレーダーであろうと、このスクリプトは時間を節約し、一貫したリスク管理を保証します。