2017年5月19日金曜日

[ハーモニック]複数通貨ハーモニック監視インジケータ 販売開始

予告通り5/20より、複数通貨ハーモニック監視インジケータを販売開始します。


複数通貨ハーモニック監視インジケータ(FX-ON)

5/19 16:00~5/24 0:00まで割引販売を行います。
ぜひこの機会にご検討ください。

またTwitterでもこんな感じでつぶやいています。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

[Trading View]Pine スクリプト 入門1 基礎構文

Trading Viewの Pine scriptは日本語の資料があまりないため、自分向けにメモ代わりに記事を残しておきたいと思います。長くなるのでいくつかに分けます。
まずは基礎構文編で、つまづきやすいところを中心に文句つけながら・・。

自分向けメモですので、プログラムは少しかじったことのある人向け対象です。

■変数の宣言と代入
Pine Scpritで、まずつまづくのは、変数の宣言と代入で、代入式が異なるという事です。
というより、代入式が演算子として認識されていません。プログラムに詳しい方向けとなりますが、複合代入式とか、インクリメント演算子とか代入と同時に演算を行うようなものは(Version3)の時点では存在しないようです。

細かい話はさておき、宣言と代入が異なるという事は、どーいうことかというと、こーいうことです。

//宣言式 =
exp1 = 0.0
//下の式はコンパイルエラー
exp1 = 1.0
//代入式 :=
exp1 := 1.0

=は宣言式で、=で宣言された際、左辺にある変数が生成されます。
その際、右辺の型で宣言されます。そのため違う型の値を入れようとするとコンパイルエラーとなります。

//宣言式 =
exp1 = 0.0
//下の式はコンパイルエラー、0.0は浮動小数点、0は整数扱い
exp1 := 0

ひとつ前の記事で、弱い型付けと書きましたが、実際は、定数宣言式である=時点で型が決定しているようです。インジケータで数字を扱う場合、通常は浮動小数点ですので、初期化する際には0.0と書くように注意しましょう。
正直、変数型が制御されるのであれば、型宣言付き変数宣言式を作成した方が良いのではなかったのでしょうか?
おかげで、宣言式=とは、別に代入式:=を用意するという、とっつき時点で変態仕様な言語になっています・・・(文句たらたらですw)

■型の種類
ということで、型の種類を意識する必要があります。
次の5つがあります。チュートリアルには精度は乗っていませんでした。多分32bitだと思いますが、でかい数字を扱いたくなった際に調査したいとおもいます。
・整数
 .を付けずに宣言すると整数扱いです。
 exp=0

・浮動小数点(exp=0.0)
 こちらは、.付きです。対数表現もできるようです。
 exp=0.0
 exp=1e-10

・論理値(exp=true)
 論理式の戻り値や、true/falseで宣言された場合です。
 exp=true
 exp=1 < 2

・文字列(exp="abcd")
 文字列は、ダブルコート/シングルコートどちらでも文字列扱いです。
 exp="abc"
 exp='abc'
 Pineエディタで日本語を入れようとすると、時々バグりますが一応入る様子。

・色(exp=red)
 色定数もしくは#RGB、#RGBAで宣言できます。(Aは透明度)
 exp=red
 exp=#FF0000   //=red
   exp=#FF000080  //半透明赤

■ブロック構造
 4空白をブロック区切りにするという仕様です。
 これは、Pineエディタを見てもらった方がわかりやすいかもしれません。
If文の下に細い縦線が描画されているのがわかるかと思います。
この縦線の間が1ブロックという事になります。
最初見た時に、この言語もしかしてブロック構文ないの?(Cでいうところの{})と思いましたがそんなことはないようです。ブロック構文禁止の言語というのも、それはそれで面白いと思いましたが・・・w

■コメント
コメント構文は、行コメントの//のみです。ブロックコメントの/* */は無いようです。

■演算式
宣言/代入を除く演算式は、普通のものなので、細かい説明は除きます。
論理演算子が、!/&&/||ではなく、not/and/orです。
英語のページですが、どんな種類があるかは大体わかるかと思います。
https://www.tradingview.com/wiki/Operators

あと、ビット演算子はありません。ですので、C系言語でいうところの、>> << & |などの演算子は無いようです。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年5月18日木曜日

[Trading View]Pine スクリプト・・・・MQLとは言語思想が違います。

トレーディングビューのプロフィールページです。GMMA IndexとTEMA累積インジを公開しています。この記事で作ったStochastic Momentum Indexはすでに公開されているスクリプトがあるため、あえて公開はしていません。
https://jp.tradingview.com/u/daisuke_gewinn/

Trading Viewではカスタムインジを作成できます。

昨日作ったStochastic Momentum IndexをTrading View向けに作ってみました。

ちなみにTrading Viewには公開されているスクリプトとしてStochastic Momentum Indexはすでに存在しています。

答えがあるということと、作ったばかりでアルゴリズムがあたまに入っているということで練習課題として作ってみました。

まずTrading Viewでチャートを開いて、チャート下にあるPineエディタを開きます。

■Pineエディタ

最初全く気が付てなくて、Pineエディタどこから開くの?って探し回ってました^^;;;

がりがりとコードを書いた後は、チャートへの追加でインジケータが追加されます。

■Trading  View EURUSD H1 SMI

■MT4 EURUSD H1 SMI

■Pineスクリプトのインプレッション
・変数宣言は代入式を書いた時点で都度弱い型付けにて定義
使用された変数はすべて配列になる。
・浮動小数点で宣言された変数は配列になる。exp=0では配列にならない。
・型が違うと未宣言エラーになる。型宣言省略した意味ないじゃん・・・。
exp = 0.0
exp1 = exp[1]

//※exp1には、ひとつ前の足のexpが入る

・ブロックは4スペース
if a < b
    処理1
    処理2
else
    else処理1
    else処理2

if文終了後の処理

・わからなかった事
 サブウィンドウ型チャートのスケールの固定方法
(たぶん、hLineに上限値下限値を入れておけば、とりあえず全部表示される形になる。)

一瞬、関数型言語??と思いましたが、そーいうわけではなく、ブロック構造とかが4スペースで宣言するという一風変わった言語のようです。

構造体とかクラスとかはなさそうです。JavaScriptsっぽくプロトタイプとかも作れなさそうです・・・。MQLを単純に移植すればOKというわけにはいかなさそうです。

ソースコードはこんな感じです。
MQLとのコードと見比べると、言語設計思想がかなり異なることがわかりますね。
明らかにCを起源とするMQLと比較すると、Pineはよりスクリプトっぽい感じです。

http://mt4program.blogspot.jp/2017/05/mt4stochastic-momentum-index.html

//@version=3
study("Stochastic Momentum Index", overlay=false)

//入力
HLPeriod = input(13, "高値安値割り出し期間")
MPeriod = input(20, "EMA期間1")
NPeriod = input(30, "EMA期間2")
SignalPeriod = input(6, "シグナル期間")

//期間高値安値を検出
lowestLow =  lowest (low, HLPeriod)
highestHigh = highest(high, HLPeriod)

//分子側
chlEma = ema(ema((close - (highestHigh + lowestLow) / 2), MPeriod), NPeriod)

//分母側
hlEma = ema(ema(((highestHigh - lowestLow) / 2), MPeriod), NPeriod)

//smi計算
smi = if hlEma != 0 
    chlEma * 100 / hlEma
else
    0

signal = ema(smi, SignalPeriod)

//描画
plot(smi, color= red, title="smi")
plot(signal,color= aqua, title="signal")

//レベルの描画
hline(40, color = green, title = "UpperLevel")
hline(-40, color = green, title = "UnderLevel")
hline(0, color = blue, title = "Zero")
hline(100, color = green, title = "UpperLevel")
hline(-100, color = green, title = "UnderLevel")


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年5月17日水曜日

[雑記]個人的メモ MT4x機械学習

・3日で資産が3倍に!! Azure Machine Learning(ML) でFx予測と自動売買連携
http://qiita.com/T_Umezaki/items/05302aec04048e280dfe
https://docs.com/user142134/9040/jazug-5-azure-mlfx

・ディープラーニング(TensorFlow)を使用した株価予想
http://qiita.com/yai/items/5ec5bbfbcc53c9770c40

・財務時系列データを使用した機械学習
https://cloud.google.com/solutions/machine-learning-with-financial-time-series-data

・第三世代ニューラルネットワーク:深層ネットワーク
https://www.mql5.com/ja/articles/1103

まぁ多分相場の世界ではガリガリ動いていそうな機械学習による相場への参加ですが、勉強がてらに。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

[MT4インジケータ]Stochastic Momentum Index 平滑化をガリガリかけたストキャス

あー、行き詰ったー。ネタないかなーということで、気分転換にインジケータ作ってみました。
テクニカルのインジケータはどーいう計算式で計算されているのか、何に基づいているのか?というのが、わたし、気になります!!

逆張りです。逆張り命です。どうせ作るなら逆張りに役立つインジということで、だましが多すぎるストキャスの問題を平滑化をガリガリかけることで改善した(?)Stochastic Momentum Indexを作成してみました。

知る人ぞ知るぐらいには定番だと思われるのですがMT4の標準には含まれていません。

見方としては、±40を超えたところのピークが天井、±10内でのピークが押し目、戻り目となります。

■USDJPY SMI ±40越え時のピーク

■USDJPY SMI ±10での押し目、戻り目

こうやってみると上昇トレンド時でも、小さくも確かにいったんの山は形成しているようにみえます。ただ、ストキャスやRSIと比べると反応が遅いですね。

FX-ONでのダウンロードはこちらから
平滑化をガリガリかけたストキャス
Stochastic Momentum Index (SMI)Stochastic Momentum Index (SMI) | fx-on.com

ソースコードです。

//------------------------------------------------------------------
// Stochastic Momentum Index
#property copyright "Copyright 2017,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_minimum -70
#property indicator_maximum 70
#property indicator_level1 40
#property indicator_level2 -40
#property indicator_level3 10
#property indicator_level4 -10

//バッファーを指定する。
#property indicator_buffers 2

//プロット数を指定する。
#property indicator_plots   2

#property indicator_label1  "SMI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrAqua
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "SIGNAL"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrYellow
#property indicator_style2  STYLE_DOT
#property indicator_width2  1

input int HLPeriod = 13;   // 高値安値割り出し期間
input int M = 20;          // 平滑化指数1
input int N = 30;          // 平滑化指数2
input int S = 6;           // シグナル

// バッファー
double m_smi[];            // SMI
double m_smiSignal[];      // シグナル
double m_chlEma1[];        // 終値-HL/2 EMA1
double m_chlEma2[];        // 終値-HL/2 EMA1
double m_hlEma1[];         // H-L EMA1
double m_hlEma2[];         // H-L EMA2

//------------------------------------------------------------------
//初期化
int OnInit()
{
   // 短縮名を設定
   string shortName = "SMI (";
   shortName += 
      IntegerToString(HLPeriod) + "," + IntegerToString(M) + "," + IntegerToString(N) + ")";
   IndicatorShortName(shortName);

   IndicatorBuffers(6);
   int count = 0;
   SetIndexBuffer(count++, m_smi);
   SetIndexBuffer(count++, m_smiSignal);
   SetIndexBuffer(count++, m_chlEma1);
   SetIndexBuffer(count++, m_chlEma2);
   SetIndexBuffer(count++, m_hlEma1);
   SetIndexBuffer(count++, m_hlEma2);
   
   //初期値を0に設定
   for( int i = 0; i < count; i++)
   {
      SetIndexEmptyValue(i, 0);
   }

   //表示しない
   for( int i = 2; i < count; i++)
   {
      SetIndexStyle(i, DRAW_NONE);
   }
   return(INIT_SUCCEEDED);
}

//------------------------------------------------------------------
//計算イベント
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 &tick_volume[],      //ティック数(要素の更新回数)
 const long &volume[],           //実ボリューム(?)
 const int &spread[])            //スプレット
{
   double alfa1 = 2 / (double)(M + 1);
   double alfa2 = 2 / (double)(N + 1);
   double alfaSignal = 2 / (double)(S + 1);

   for( int i = rates_total - prev_calculated - 1 ; i >= 0; i-- )
   {
      if( i > rates_total - HLPeriod - 1) continue;
      
      //期間内高値安値の平均値(HL/2)
      double highest = high[iHighest(NULL, 0, MODE_HIGH, HLPeriod, i)];
      double lowest = low[iLowest(NULL, 0, MODE_LOW, HLPeriod, i)];
      
      //終値-HL/2のEMA1
      m_chlEma1[i] = (close[i] - (highest + lowest) / 2) * alfa1 + (1 - alfa1) * m_chlEma1[i + 1];
      //終値-HL/2のEMA2
      m_chlEma2[i] = m_chlEma1[i] * alfa2 + (1 - alfa2) * m_chlEma2[i + 1];
      
      // H-LのEMA1
      m_hlEma1[i] = (highest - lowest) / 2 * alfa1 + (1 - alfa1) * m_hlEma1[i + 1];
      //終値-H-LのEMA2
      m_hlEma2[i] = m_hlEma1[i] * alfa2 + (1 - alfa2) * m_hlEma2[i + 1];
      
      if( m_hlEma2[i] > 0 )
      {
         m_smi[i] = m_chlEma2[i] * 100/ m_hlEma2[i];
      }
      
      m_smiSignal[i] = m_smi[i] * alfaSignal + ( 1 - alfaSignal ) * m_smiSignal[i + 1];
   }

   return rates_total - 1;
}

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年5月16日火曜日

MT4 Build 1080 仕様変更??? ハーモニック系インジのコンパイルが通らない(泣)

複数通貨インジのリリース準備をしていたところ、Build1080へのバージョンアップが入りました。

バージョンアップしたところ、コンパイルが通らなくなりました・・・(泣)

オブジェクトポインタ配列に対するArrayCopyが正しく動作しなくなっています。

構造体配列のコピーを禁止する制御が入っているようですがポインタに対しても一律禁止になったようです。

CObject *srcArray[];
CObject *destArray[];

ArrayResize(srcArray, 10);
ArrayResize(destArray, 10);

ArrayCopy(destArray, srcArray);

'srcArray' - structures containing objects are not allowed

うあ、マジどうしよう・・・・。このテクニック使わないと遅すぎてやってられないのに・・・。
ちょっと複数通貨向けインジのリリース時期が遅れるかもしれません。

追記
いまとなってはできないので、どうでもよいのですが、なんでこんなことしてたかというと、MQLにくっついてくる、CArrayObjのInsertメソッド内、コピー処理が遅すぎたので、中身修正していたのです。圧倒的に上記のコードの方が早かったのですが、仕方がないので元のコードに戻しました。
速度気にしないのであれば、CArrayObjそのまま利用して問題ないかと思います。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年5月15日月曜日

[Gewinn9]わーい+になった。逆張りEAはこれが楽しい。

フランス大統領選真っさなかにフォワード稼働して、あーしばらく待ってればよかったと後悔していたGewinn9君ですが、金曜日でがっつり取り戻しました。

逆張りEAはサプライズが発生したときに逆側に大きく動くのを狙っている処もあるので、こーいう風に一挙に取り戻せるときがあります。
(予想通り側にいった場合より逆側に行った方が値動きが大きい)

Gewinn9 EURUSD | fx-on.com

まだまだフォワード確認中ですので、これだけの結果で喜べないですが、まぁマイナス側に全振りされるよりは+側に行ってくれた方が楽しいです。(っていうよりリアル稼働していた側は証拠金不足でけられてた・・・初期金額少なくしすぎた・・・。)

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。