- MathSinh関数の働き・役割
 - 双曲線正弦とは
 - MathSinh関数の引数について
 - MathSinh関数の戻り値について
 - MathSinh関数を使ったサンプルコード
 - サンプルコード解説1: グローバル領域での定義
 - サンプルコード解説2:OnStart関数の中その1
 - サンプルコード解説3:OnStart関数の中その2
 - サンプルコード解説4:OnStart関数部分その3
 - サンプルコード解説5: StopKeyPressed関数(オリジナル関数)部分
 - サンプルコード解説6:CurvePlot関数(オリジナル関数)部分
 - サンプルコード解説7:MakeAndSaveScreenshot関数(オリジナル関数)部分
 - この関数を使ってEAを作る際のアイディア
 
MathSinh関数の働き・役割
MathSinh関数は、指定された数値の双曲線正弦(ハイパボリックサイン)を計算し、その値を返します。双曲線正弦は、数学や物理学などで用いられる双曲線関数の一つで、指数関数に基づいて計算されます。MQL5では、MathSinh関数を使用して、さまざまな数値の双曲線正弦値を求めることが可能です。
また、MathSinh関数の代替として、sinh関数も同様の動作を行います。
双曲線正弦とは
双曲線正弦(ハイパボリックサイン)は、三角関数である「正弦」とは異なり、双曲線に関する関数です。通常の三角関数が円を基にしているのに対して、双曲線正弦は双曲線の形に基づいて計算されます。双曲線正弦の値は、以下の数式を使って求めることができます。
sinh(x) = (e^x - e^(-x)) / 2
この式で使われる「e」は「ネイピア数」と呼ばれる特別な数で、約2.718という値を持っています。この数は、自然界や数学で非常に重要な役割を果たす数です。式の意味は、xの指数(eのべき乗)から-xの指数を引き、それを2で割ることで双曲線正弦を計算する、というものです。
具体的な計算例
いくつかの具体例を使って、計算の過程を見ていきます。
例1:x = 1の場合
1を双曲線正弦に当てはめて計算してみます。
- e^1 = 2.71828
 - e^(-1) = 1 / e ≈ 0.36788
 - (2.71828 – 0.36788) / 2 = 1.1752
 
したがって、xが1のとき、双曲線正弦の値は約1.1752となります。
例2:x = 0の場合
0を双曲線正弦に当てはめて計算してみます。
- e^0 = 1(eの0乗は常に1になります)
 - e^(-0) = 1(同様にeの0乗は1です)
 - (1 – 1) / 2 = 0
 
したがって、xが0のとき、双曲線正弦の値は0となります。
例3:x = -1の場合
-1を双曲線正弦に当てはめて計算してみます。
- e^(-1) ≈ 0.36788
 - e^(1) ≈ 2.71828
 - (0.36788 – 2.71828) / 2 = -1.1752
 
したがって、xが-1のとき、双曲線正弦の値は約-1.1752となります。
例4:x = 2の場合
2を双曲線正弦に当てはめて計算してみます。
- e^2 ≈ 7.38906
 - e^(-2) ≈ 0.13534
 - (7.38906 – 0.13534) / 2 = 3.6269
 
このように、xが2のとき、双曲線正弦の値は約3.6269となります。
双曲線正弦の性質
このように双曲線正弦は、正の値ではプラスの値、負の値ではマイナスの値を取り、xが大きくなると急激に増加します。双曲線正弦は指数関数を用いて計算されるため、特にxが大きい場合や負の値が大きくなる場合に急激に値が増減する特徴があります。
MathSinh関数の引数について
double  MathSinh(
  double  value      // 数値
  );例えば、valueに1.0を指定した場合、MathSinh関数は1.0の双曲線正弦の値を計算して返します。この関数は、正の数でも負の数でも、任意の実数を受け付けるため、幅広い値で使用することが可能です。
MathSinh関数の戻り値について
MathSinh関数は、指定された実数の双曲線正弦の値を計算し、その結果をdouble型で返します。
例えば、MathSinh関数に1.0を渡した場合、この関数は約1.1752という双曲線正弦の値を返します。また、-1.0を渡した場合には、約-1.1752という値を返します。このように、MathSinh関数は入力された値に応じた双曲線正弦を計算し、その結果を出力します。
MathSinh関数を使ったサンプルコード
#define GRAPH_WIDTH 750         // グラフの幅を750ピクセルに設定
#define GRAPH_HEIGHT 350        // グラフの高さを350ピクセルに設定
#include <Graphics\Graphic.mqh> // グラフィック描画用のライブラリをインクルード
CGraphic ExtGraph;              // グラフィックオブジェクトのインスタンスを作成
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                      |
//+------------------------------------------------------------------+
void OnStart()
{
  // deltaベクトルを作成し、2πを100分割した値で初期化
  // Fullメソッドを使用して101個の要素を持つベクトルを作成
  vector delta = vector::Full(101, 2 * M_PI / 100);
  delta[0] = 0;                 // ベクトルの最初の値を0に設定
  
  //--- deltaステップで0から2πまでの101個の値を累積して取得する
  vector X = delta.CumSum();    // deltaの累積値をXに格納
  
  //--- Xベクトルの各値の双曲線正弦値を計算する
  vector Y = MathSinh(X);       // 各Xの双曲線正弦をYベクトルに格納
  
  //--- 計算された値をベクトルから配列に転送する
  double x_array[], y_array[];  // x座標とy座標の配列を定義
  X.Swap(x_array);              // Xベクトルの内容をx_arrayに転送
  Y.Swap(y_array);              // Yベクトルの内容をy_arrayに転送
  
  //--- 計算されたベクトル値のグラフを描画する
  CurvePlot(x_array, y_array, clrDodgerBlue); // グラフの曲線を描画
  
  //--- EscapeキーまたはPgDnキーを押してグラフを削除し、終了するまで待機する
  while (!IsStopped())          // スクリプトが停止されるまでループ
  {
    if (StopKeyPressed())       // 停止キーが押されていればループを抜ける
      break;
    Sleep(16);                  // CPU負荷を下げるために短時間の待機
  }
  
  //--- クリーンアップ
  ExtGraph.Destroy();           // グラフィックオブジェクトを破棄
}
//+------------------------------------------------------------------+
//| ESCが押されたら「true」を返す                                     |
//| PgDnが押されたらグラフのスクリーンショットを撮り、「true」を返す |
//| その他の場合は「false」を返す                                     |
//+------------------------------------------------------------------+
bool StopKeyPressed()
{
  //--- ESCキーが押されたら「true」を返す
  if (TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) != 0)
    return (true);
  
  //--- PgDnが押されたらグラフのスクリーンショットを撮り、「true」を返す
  if (TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN) != 0 && 
      MakeAndSaveScreenshot(MQLInfoString(MQL_PROGRAM_NAME) + "_Screenshot"))
    return (true);
  
  //--- どちらのキーも押されていなければ「false」を返す
  return (false);
}
//+------------------------------------------------------------------+
//| グラフオブジェクトを作成して曲線を描く                           |
//+------------------------------------------------------------------+
void CurvePlot(double &x_array[], double &y_array[], const color colour)
{
  // グラフオブジェクトを作成し、サイズを設定
  ExtGraph.Create(ChartID(), "Graphic", 0, 0, 0, GRAPH_WIDTH, GRAPH_HEIGHT);
  
  // 配列の内容で曲線を追加し、色を指定
  ExtGraph.CurveAdd(x_array, y_array, ColorToARGB(colour), CURVE_LINES);
  
  // グラフのインデント(上方向の余白)を追加
  ExtGraph.IndentUp(30);
  
  // 全ての曲線をプロット
  ExtGraph.CurvePlotAll();
  
  // グラフ上に案内テキストを追加
  string text1 = "Press ESC to delete the graph and stop the script, or";
  string text2 = "Press PgDn to create a screen, delete the graph and stop the script";
  ExtGraph.TextAdd(54, 9, text1, ColorToARGB(clrBlack));
  ExtGraph.TextAdd(54, 21, text2, ColorToARGB(clrBlack));
  
  // グラフの更新
  ExtGraph.Update();
}
//+------------------------------------------------------------------+
//| スクリーンショットを撮り、画像をファイルに保存する                |
//+------------------------------------------------------------------+
bool MakeAndSaveScreenshot(const string file_name)
{
  // ファイル名リストを格納する配列
  string file_names[];
  
  // エラー状態をリセット
  ResetLastError();
  
  // 保存するファイルの選択ダイアログを表示し、ファイルが選択された場合に続行
  int selected = FileSelectDialog("Save Picture", NULL, "All files (*.*)|*.*", FSD_WRITE_FILE, file_names, file_name + ".png");
  if (selected < 1)
  {
    // エラーが発生した場合はエラーメッセージを出力
    if (selected < 0)
      PrintFormat("%s: FileSelectDialog() function returned error %d", __FUNCTION__, GetLastError());
    return false;               // エラーの場合はfalseを返す
  }
  
  // スクリーンショットを保存
  bool res = false;
  if (ChartSetInteger(0, CHART_SHOW, false)) // チャートを一時的に非表示
    res = ChartScreenShot(0, file_names[0], GRAPH_WIDTH, GRAPH_HEIGHT);
  ChartSetInteger(0, CHART_SHOW, true);      // チャートを再表示
  
  return (res);                 // 成功した場合はtrueを返す
}
このコードは、指定された範囲の値について双曲線正弦(ハイパボリックサイン)を計算し、それをもとにグラフを描画するスクリプトです。
まず、0から2πまでの範囲を100等分して得られる101個の数値を生成し、それぞれの双曲線正弦を計算します。計算結果をもとにしたグラフが描画され、画面に「ESCキーを押して終了」や「PgDnキーでスクリーンショットを撮る」旨のテキストが表示されます。
ESCまたはPgDnキーを押すと、グラフが削除され、スクリプトが終了します。また、PgDnキーを押すとグラフのスクリーンショットが保存されます。
サンプルコード解説1: グローバル領域での定義
#define GRAPH_WIDTH 750    // グラフの幅を設定
#define GRAPH_HEIGHT 350   // グラフの高さを設定
#include <Graphics\Graphic.mqh> // グラフィック描画用のライブラリをインクルード
CGraphic ExtGraph; // CGraphicクラスのインスタンスを作成定義の詳細
グラフの幅と高さの定義
グラフの幅を750ピクセル(デジタル画像を構成する最小の単位)に、グラフの高さを350ピクセルに設定しています。defineディレクティブを使用して定数を定義することで、コード内でこれらの値を使用する際に簡単に参照できるようになります。
グラフィックライブラリのインクルード
includeディレクティブを使用して、グラフィック関連の機能を提供するライブラリファイル「Graphic.mqh」をインクルードしています。このライブラリには、グラフの描画や曲線の追加など、グラフィック操作に必要な関数やクラスが定義されています。
グラフィックオブジェクトの作成
CGraphicクラスのインスタンスであるExtGraphオブジェクトを作成しています。このインスタンスは、グラフの描画や操作に使用されます。
クラスはオブジェクト指向プログラミングの基本要素であり、特定の機能を持つオブジェクト(変数や配列など)を作成するためのテンプレートです。
サンプルコード解説2:OnStart関数の中その1
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                      |
//+------------------------------------------------------------------+
void OnStart()
{
  // deltaベクトルを作成し、2πを100分割した値で初期化
  // Fullメソッドを使用して101個の要素を持つベクトルを作成
  vector delta = vector::Full(101, 2 * M_PI / 100);
  delta[0] = 0;                 // ベクトルの最初の値を0に設定
  
  //--- deltaステップで0から2πまでの101個の値を累積して取得する
  vector X = delta.CumSum();    // deltaの累積値をXに格納
  
  //--- Xベクトルの各値の双曲線正弦値を計算する
  vector Y = MathSinh(X);       // 各Xの双曲線正弦をYベクトルに格納上記のコードは、OnStart関数内で、双曲線正弦を計算するための前準備を行う部分です。
まず、deltaという名前のベクトル(データを格納するリストのようなもの)を作成しています。このベクトルには、0から2πまでを100分割した値が入ります。ここで使用しているのは、vectorクラスのFullメソッドで、このメソッドにより0から2πの範囲を101個の要素で埋めたベクトルを作成しています。これにより、0から2πまでの範囲を100のステップで区切ることができます。
次に、deltaベクトルの各要素を累積して合計していき、新たにXというベクトルを作成します。ここでは、CumSumメソッドを使用してdeltaの累積合計値を取得しています。Xには、0から2πまでの範囲で増加する101個の値が含まれ、双曲線正弦を求めるための対象値となります。
最後に、Xベクトルの各値に対して双曲線正弦を計算し、その結果をYベクトルに格納しています。
サンプルコード解説3:OnStart関数の中その2
// ベクトルの計算結果を配列に転送
  double x_array[],y_array[];
  X.Swap(x_array);    // Xベクトルの値をx_array配列に転送
  Y.Swap(y_array);    // Yベクトルの値をy_array配列に転送
 
  // 計算結果をもとに、グラフを描画する
  CurvePlot(x_array, y_array, clrDodgerBlue);このセクションでは、ベクトルの計算結果を配列に転送し、グラフを描画する手順について解説します。
まず、x_arrayおよびy_arrayと宣言し、x座標とy座標の値を保持する配列を用意しています。次に、XベクトルとYベクトルの計算結果を、それぞれx_arrayとy_arrayという配列に転送しています。この転送にはSwapメソッドが使用され、これによってXベクトルの内容がx_array配列に、Yベクトルの内容がy_array配列に簡単にコピーされます。
その後、CurvePlot関数を使用して、x_arrayとy_arrayの値をもとにグラフを描画しています。CurvePlot関数の引数には描画するデータの配列であるx_arrayとy_array、および色指定のためのclrDodgerBlueが渡され、指定された色でグラフが描かれます。
サンプルコード解説4:OnStart関数部分その3
//--- EscapeキーまたはPgDnキーを押してグラフを削除し、終了するまで待機
  while (!IsStopped())
    {
    if (StopKeyPressed()) // 停止ボタンが押されているかを確認
        break;
    Sleep(16); // 16ミリ秒待機してから次のループへ
    }
 
  //--- グラフィックのクリーンアップ
  ExtGraph.Destroy(); // ExtGraphオブジェクトを削除してメモリを解放
 }この部分のコードは、グラフを表示させたまま、ESCキーまたはPgDnキーが押されるのを待機する処理です。
まず、while文でループを開始し、スクリプトが停止されていない間、つまりIsStopped関数がfalseを返す間はループが続きます。ループの中でStopKeyPressed関数が呼ばれ、ESCキーまたはPgDnキーが押されたかを確認します。もし、いずれかのキーが押されている場合、break文によってループを抜け、待機処理を終了します。これにより、ユーザーが任意のタイミングでグラフの表示を終了できるようになっています。
ループ内でSleep関数が16ミリ秒の待機を挟むことで、CPU負荷を軽減しながらキーの入力を定期的に確認します。待機処理が終了すると、グラフのクリーンアップに移ります。ExtGraphインスタンスに対してDestroyメソッドを呼び出し、グラフを破棄して使用していたメモリを解放します。これにより、スクリプトの終了時にリソースが適切に解放されます。
サンプルコード解説5: StopKeyPressed関数(オリジナル関数)部分
//+------------------------------------------------------------------+
//| ESCが押されたら「true」を返す                                    |
//| PgDnが押されたら、グラフのスクリーンショットを撮り、「true」を返す  |
//| その他の場合は「false」を返す                                    |
//+------------------------------------------------------------------+
bool StopKeyPressed()
{
    // --- ESCが押されたら「true」を返す
    if (TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) != 0)
        return(true);
    // --- PgDnが押されてグラフのスクリーンショットが正常に取得されたら、「true」を返す
    if (TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN) != 0 && MakeAndSaveScreenshot(MQLInfoString(MQL_PROGRAM_NAME) + "_Screenshot"))
        return(true);
    // --- その他の場合は「false」を返す
    return(false);
}StopKeyPressed関数は、ESCキーやPgDnキーが押されたかどうかを検出し、特定の動作を行うためのカスタム関数です。この関数は、グラフ表示の終了条件を管理する重要な役割を持っています。
まず、TerminalInfoInteger関数を使用してESCキーの状態を確認しています。引数として、TERMINAL_KEYSTATE_ESCAPEという識別子を指定しています。この識別子は、ESCキーの押下状態を取得するために使用され、キーが押されている場合には非ゼロの値が返されます。もし非ゼロが返された場合、関数はtrueを返し、スクリプト内でグラフの表示を終了させることができます。
次に、PgDnキーが押されているかどうかを確認しています。この場合もTerminalInfoInteger関数を使用しており、引数としてTERMINAL_KEYSTATE_PAGEDOWNという識別子を指定しています。この識別子は、PgDnキーの押下状態を取得するために使用され、押されていれば非ゼロが返されます。PgDnキーが押されているときには、さらにMakeAndSaveScreenshot関数を呼び出してスクリーンショットをファイルに保存します。
MakeAndSaveScreenshot関数には、スクリーンショットのファイル名を指定するための文字列が引数として渡されています。この文字列は、MQLInfoString関数を使用して生成されています。MQLInfoString関数の引数には、MQL_PROGRAM_NAMEという識別子が指定されており、これによって現在のスクリプト名が取得されます。スクリーンショットのファイル名には、このスクリプト名に「_Screenshot」という文字列を追加し、ファイルが保存されます。
スクリーンショットの保存に成功した場合にはtrueが返され、PgDnキーによる終了動作とスクリーンショットの保存が同時に行われます。いずれのキーも押されていない場合にはfalseが返され、スクリプトは実行を続行します。この構造により、ESCまたはPgDnが押されるまでグラフを表示し、必要に応じてスクリーンショットを保存してからスクリプトを終了する動作が可能になります。
サンプルコード解説6:CurvePlot関数(オリジナル関数)部分
//+------------------------------------------------------------------+
//| グラフオブジェクトを作成して曲線を描画                            |
//+------------------------------------------------------------------+
void CurvePlot(double &x_array[], double &y_array[], const color colour)
 {
  // グラフオブジェクトを作成(チャートID、名前、座標などを設定)
  ExtGraph.Create(ChartID(), "Graphic", 0, 0, 0, GRAPH_WIDTH, GRAPH_HEIGHT);
  
  // カーブ(曲線)を追加し、色とラインの種類を指定
  ExtGraph.CurveAdd(x_array, y_array, ColorToARGB(colour), CURVE_LINES);
  
  // テキストのインデント位置を少し上に設定
  ExtGraph.IndentUp(30);
  
  // すべての曲線を描画
  ExtGraph.CurvePlotAll();
  
  // ESCキーとPgDnキーに関する操作方法の説明を追加
  string text1 = "Press ESC to delete the graph and stop the script, or";
  string text2 = "Press PgDn to create a screen, delete the graph and stop the script";
  ExtGraph.TextAdd(54, 9, text1, ColorToARGB(clrBlack));
  ExtGraph.TextAdd(54, 21, text2, ColorToARGB(clrBlack));
  
  // グラフの更新
  ExtGraph.Update();
 }CurvePlot関数は、渡された配列データをもとにグラフを作成し、指定した色で曲線を描画するためのカスタム関数です。この関数には、x軸とy軸のデータ配列、および曲線の色を指定するための引数が含まれています。
最初に、ExtGraphインスタンスのCreateメソッドを使用してグラフを作成しています。Createメソッドの引数には、ChartID、グラフの名前(”Graphic”)、座標(0, 0)、および幅と高さ(GRAPH_WIDTHとGRAPH_HEIGHT)が指定されています。ChartID関数は、現在のチャートIDを取得する関数で、これにより生成されたグラフは現在のチャートに描画されます。
次に、ExtGraphインスタンスのCurveAddメソッドを使用して、x軸とy軸の配列データをもとに曲線を追加します。CurveAddメソッドの引数には、x_arrayとy_arrayの配列、指定した色をARGB形式に変換するためのColorToARGB関数、そして曲線のスタイル(CURVE_LINES)が渡されています。この処理によって、指定の色とスタイルで曲線が描画されます。
続いて、IndentUpメソッドを使用してグラフの上部に30ピクセル(デジタル画像を構成する最小の単位)の空白を追加しています。これにより、グラフ上に余白が確保され、グラフが画面に適切に配置されるようになります。
その後、CurvePlotAllメソッドを使用して、追加した曲線をグラフに描画しています。
さらに、グラフの操作方法についての説明文を追加しています。text1およびtext2という文字列には、それぞれ「ESCキーでグラフを削除してスクリプトを停止する」「PgDnキーでスクリーンショットを作成してからグラフを削除し、スクリプトを停止する」という内容の説明が含まれています。TextAddメソッドを使って、これらのテキストを画面の指定位置(x=54, y=9 と x=54, y=21)に描画し、説明が表示されるようにしています。
また、色の指定にはColorToARGB関数を使用しています。ColorToARGB関数は、指定された色をARGB(Alpha、Red、Green、Blue)形式に変換し、透過度や色の設定が反映されるようにします。これにより、TextAddメソッドで追加するテキストや曲線が指定の色で正しく表示されます。
最後に、Updateメソッドを呼び出してグラフの描画を更新し、設定したデータやテキストを反映させます。この一連の処理により、x軸とy軸のデータに基づく曲線が描画され、操作の説明が表示されたグラフが完成します。
サンプルコード解説7:MakeAndSaveScreenshot関数(オリジナル関数)部分
//+------------------------------------------------------------------+
//| スクリーンショットを撮り、画像をファイルに保存する                |
//+------------------------------------------------------------------+
bool MakeAndSaveScreenshot(const string file_name)
 {
  string file_names[]; // ファイル名を格納するための配列を初期化
  ResetLastError(); // 最後のエラーをリセット
  
  // ファイル保存用のダイアログを表示し、選択されたファイルを取得
  int selected = FileSelectDialog("Save Picture", NULL, "All files (*.*)|*.*", FSD_WRITE_FILE, file_names, file_name + ".png");
  if (selected < 1)
    {
    // ファイル選択エラーが発生した場合の処理
    if (selected < 0)
        PrintFormat("%s: FileSelectDialog() function returned error %d", __FUNCTION__, GetLastError());
    return false; // エラー時はfalseを返す
    }
 
  bool res = false; // 成功判定の変数
  // 一時的にチャート表示を無効化し、スクリーンショットを撮影
  if (ChartSetInteger(0, CHART_SHOW, false))
    res = ChartScreenShot(0, file_names[0], GRAPH_WIDTH, GRAPH_HEIGHT);
  
  // チャート表示を再度有効に設定
  ChartSetInteger(0, CHART_SHOW, true);
  
  return (res); // スクリーンショットが正常に保存できた場合はtrueを返す
 }MakeAndSaveScreenshot関数は、スクリーンショットを撮影し、指定したファイル名で保存する機能を持っています。この関数は、ユーザーがPgDnキーを押した際に呼び出され、現在のチャートのスクリーンショットをファイルに保存する手順を実行します。
最初に、file_namesという空の文字列配列を作成しています。これは、ファイル選択ダイアログから選ばれたファイル名を格納するための配列です。また、ResetLastError関数を呼び出してエラー状態をリセットし、後の処理で発生するエラーが過去のエラーと混在しないようにします。
次に、FileSelectDialog関数を使って、ファイルの保存ダイアログを表示します。この関数の最初の引数にはダイアログタイトル(”Save Picture”)、次の引数にNULL、そしてファイルの種類として”All files (.)|.“を指定しています。
この”(.)|.“の形式は、ファイルダイアログでのファイルフィルターを設定するための書式です。
左側の(.)はフィルターの表示名で「すべてのファイル」を示し、右側の.はフィルターの実際の条件を指定しています。
これにより、ダイアログにすべてのファイルを表示するようになります。最後の引数には、デフォルトのファイル名として指定されたfile_nameに拡張子”.png”を追加した文字列を渡しています。FileSelectDialog関数が成功すると、選ばれたファイル名がfile_names配列に格納され、選択数が返されます。
ファイルが選択されなかった場合、またはエラーが発生した場合はfalseを返します。選択にエラーが発生した場合、GetLastError関数で取得したエラーコードをPrintFormat関数でエラーメッセージとして出力します。
スクリーンショットの保存処理では、まずChartSetInteger関数でチャート表示を一時的に非表示にします。引数には、チャート識別子として0、プロパティとしてCHART_SHOW、表示を無効にするためのfalseが指定されています。次に、ChartScreenShot関数を呼び出し、file_names配列の最初の要素に指定されたファイル名で、GRAPH_WIDTHとGRAPH_HEIGHTのサイズでスクリーンショットを保存します。最後にChartSetInteger関数でチャートを再表示します。
関数の戻り値として、スクリーンショットが正常に保存されたかどうかの成否が返されます。
この関数を使ってEAを作る際のアイディア
ボラティリティ計算に基づくトレード判断
双曲線正弦は、価格変動が急激な場合に大きな値を返し、変動が緩やかな場合には小さな値を返す特徴を持っています。この性質を利用して、価格変動の急激さ(ボラティリティ)を判定するためのカスタムインジケータを作成し、ボラティリティが一定の閾値を超えたときにエントリーやエグジットを行うEAを開発できます。
トレンド分析の補助として利用
双曲線正弦の性質を使って、トレンドの強さや反転の兆候を確認することも可能です。例えば、価格変動に双曲線正弦を適用し、トレンドの強さを示すインジケータとして使用することが考えられます。トレンドが強まると双曲線正弦の値が急激に変化するため、この値を利用してトレンド継続や反転のタイミングを探るEAの作成ができます。
エントリーポイントのタイミングを計る
特定の価格帯でのエントリーを最適化するため、価格変動にMathSinh関数を適用し、重要なポイントを探す方法もあります。例えば、価格が特定の範囲内で上下している場合、その範囲内での急激な変動を検出し、エントリーのタイミングとして利用するEAが考えられます。
他のインジケータとの組み合わせ
MathSinh関数で得られた双曲線正弦の値を、移動平均やRSIなどの他のインジケータと組み合わせて使用することで、トレード精度を向上させることができます。双曲線正弦によって価格変動の強さを評価しつつ、他のインジケータで方向やオシレーション(相場の動きを波のように繰り返す現象)を確認することで、複合的なトレード戦略を実現できます。


  
  
  
  
