https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6853ec95-5f15-4704-a6b6-91d045d703f6/chart3.png

ストキャスティックスは、一定期間の最安値を0、最高値を100としたときに、終値がどのあたりに位置するかを示す指標です。

20以下で売られすぎ、80以上で買われすぎと判断すると、逆張りの仕掛けシグナルの目安となります。

ただし、ストキャスティックスでは、移動平均をとって平滑化したシグナルラインも表示されるので、ストキャスティックスとシグナルラインのゴールデンクロスで買いシグナル、デッドクロスで売りシグナルを出すことにします。

仕掛けシグナル

<aside> 💡 買いシグナル:1本前のストキャスティックスが20以下で、2本前から1本前にかけてストキャスティックスがシグナルラインを下から上に交差したとき 売りシグナル:1本前のストキャスティックスが80以上で、2本前から1本前にかけてストキャスティックスがシグナルラインを上から下に交差したとき

</aside>

コード

//共通ライブラリ
#include "LibEA.mqh"

sinput double Lots = 0.1; //売買ロット数

//ティック時実行関数
void Tick()
{
   int sig_entry = EntrySignal(); //仕掛けシグナル
   //成行売買
   MyOrderSendMarket(sig_entry, sig_entry, Lots);
}

input int KPeriod = 8; //ストキャスティクスの期間
input int DPeriod = 3; //移動平均の期間
input int SignalPeriod = 3; //シグナル用移動平均の期間

//仕掛けシグナル関数
int EntrySignal()
{
   //1本前のストキャスティクス
   double Stoch1 = iStochastic(_Symbol, 0, KPeriod, DPeriod, SignalPeriod, MODE_SMA, STO_LOWHIGH, MODE_MAIN, 1);
   double Signal1 = iStochastic(_Symbol, 0, KPeriod, DPeriod, SignalPeriod, MODE_SMA, STO_LOWHIGH, MODE_SIGNAL, 1);
   //2本前のストキャスティクス
   double Stoch2 = iStochastic(_Symbol, 0, KPeriod, DPeriod, SignalPeriod, MODE_SMA, STO_LOWHIGH, MODE_MAIN, 2);
   double Signal2 = iStochastic(_Symbol, 0, KPeriod, DPeriod, SignalPeriod, MODE_SMA, STO_LOWHIGH, MODE_SIGNAL, 2);

   int ret = 0; //シグナルの初期化

   //買いシグナル
   if(Stoch2 <= Signal2 && Stoch1 > Signal1 && Stoch1 <= 20) ret = 1;
   //売りシグナル
   if(Stoch2 >= Signal2 && Stoch1 < Signal1 && Stoch1 >= 80) ret = -1;

   return ret; //シグナルの出力
}

説明

ストキャスティックスは、[iStochastic()](<https://toyolab-fx.notion.site/iStochastic-386024889f8f4933af19023485d697de>)というテクニカル指標関数で求められます。

%K期間、%D期間、および%Kスローイング期間として、別途宣言したKPeriodDPeriodSignalPeriodをそれぞれ引数KperiodDperiodslowingに代入します。

シグナルラインの算出に使う移動平均ma_methodは、MODE_SMA(単純移動平均)、最高値・最安値を算出する価格の種類price_fieldは、STO_LOWHIGH(高値・安値)とします。

modeの引数には、ストキャスティックスを求める場合、MODE_MAINを、シグナルラインを求める場合、MODE_SIGNALをそれぞれ代入します。

2本前のストキャスティックスStoch2とシグナルラインSignal2の大小関係、1本前のストキャスティックスStoch1とシグナルラインSignal1の大小関係により、シグナルを判定します。