FXでよく利用される値幅「エリオット波動」、「N値」、「E値」を簡単に計算できます。
バージョン1.00
FXでよく利用される値幅「エリオット波動」、「N値」、「E値」を簡単に計算できます。
バージョン1.00
前回の続きの記事になります。
聞いたことのない注文方法だなと思った方はお察しの通り、「完全オリジナルの注文方法」になります。
長年実現したいと思っていた注文方法の一つです。
一言でいうと「目標とするラインをタッチしたときに注文を執行」します。
通常の指値や逆指値と変わらないと思うかもしれませんが、どこが違うのかというと、タッチしただけではなく「タッチ後に〇本以内に戻る」のならばという条件つきです。
少し名前にセンスがないので呼称に関してはもう少し検討中になります。
分かりづらいのでもう少し戻り成行注文を掘り下げて説明すると
①現在USDJPYが99.8円です。
②100円で売りたいと思います。
③通常の指値の場合は100円にタッチしたらすぐにショート注文が約定されます。
④戻り成行の場合は100円にタッチした後に「5本以内に100円以下に戻るのならばショート注文」を約定させます。
上記の通り、この注文方法の構想は逆張り時のリスクを減らす注文方法となっております。
指値というものは絶対的に逆張りの注文となるため、指値をそのまま突き抜けてしまうといった事故が起こることが間々あります。
そのリスクを通常の指値注文よりも抑えるために実現したいと思っていた注文方法となります。
同様に戻り指値注文に関してですが上記「④のタイミングで指値を配置する」ことができます。
例えば100円ラインをブレイクした際に99.2円まで戻るのならば場合買いたいと思っている場合、ブレイクラインを100円に設定、指値を99.2円に設定する。
この場合は順張りの注文となり、100円にタッチ後「5本以内に100円以下に戻るのならば99.2円に買い指値を配置」の様なよりリスクを抑えた通常ではできない様な注文方法を実現できます。
こちらは順張りの押し目買い、戻り売りをしたいときの注文方法になります。
世界中調べたわけではありませんがおそらく完全オリジナルな注文方法のため、テストしつつ実装している段階です。
現在の物は少し不都合があったため修正予定になりますが、Rボタンを押下すると戻成行用のエントリーラインをセットすることができます。
OnTickの中でエントリーラインと指定時間足の現在値を比較し、エントリーラインをCloseが超えた場合には買い注文フラグを立てます。
フラグが立っている状態で〇本以内にエントリーライン以下に戻るのを待ち戻った場合は注文を執行。
もしくは設定本数以上ローソク足が進んだ場合は期限切れキャンセルとなります。
もう一つの注文キャンセル方法としては、エントリー時に設定をしたslをエントリーラインを下回る前に超えた場合には注文キャンセルという処理を検討しております。
こちらについては現在実装前のため、構想のみです。
開発中のため変数設定もわかりづらいですがここで利用している「ReverseLimit」についてはローソク足の指定本数になります。
簡単にまとめると
①トリガーラインを超えたローソク足の時間を変数に入れる。
②ローソク足が進むごとに繰り返し、指定したローソクの本数を過ぎるまたはslを超えた場合に設定解除。
キャンセル処理に関しては最初の分岐点がオブジェクトの有無のため、オブジェクトの削除と注文方法のフラグのリセットだけになります。
if(ObjectFind("reMarket") != EMPTY)
{
objrm = NormalizeDouble(ObjectGetDouble(0,"reMarket",OBJPROP_PRICE1),MarketInfo(Symbol(),MODE_DIGITS));
if(High[1] < objrm && High[0] > objrm)
{
ReverseOrderFlag = -1;
rm_time = iTime(Symbol(),5,0);
}
if(Low[1] > objrm && Low[0] < objrm)
{
ReverseOrderFlag = 1;
rm_time = iTime(Symbol(),5,0);
}
rm_bars_shift = iBarShift(Symbol(),5,rm_time,true);
if(ReverseLimit > rm_bars_shift && rm_bars_shift != -1 && rm_bars_shift != 0)
{
if(ReverseOrderFlag == -1)
{
for(int i = 1; i < ReverseLimit; i++)
{
if(Close[i] < objrm)
{
BtnOrderType = "Market";
lotSize = RoundDown(StringToDouble(ObjectGetString(0,"reMarkettext",OBJPROP_TEXT)),2);
OpenShortOrder();
ObjectDelete("reMarket");
ObjectDelete("reMarkettext");
ReverseOrderFlag = 0;
}
}
}
else
if(ReverseOrderFlag == 1)
{
for(int i = 1; i < ReverseLimit; i++)
{
if(Close[i] > objrm)
{
BtnOrderType = "Market";
lotSize = RoundDown(StringToDouble(ObjectGetString(0,"reMarkettext",OBJPROP_TEXT)),2);
OpenLongOrder();
ObjectDelete("reMarket");
ObjectDelete("reMarkettext");
ReverseOrderFlag = 0;
}
}
}
}
else
if(ReverseLimit <= rm_bars_shift)
{
ObjectDelete("reMarket");
ObjectDelete("reMarkettext");
ReverseOrderFlag = 0;
}
}
戻指値に関しても同様の処理となっていますが、同じ様に作成したため現在1本のラインがトリガーライン、エントリーラインを兼任しています。
当然ですが指値の場合はエントリーラインが執行時価格以上になるためエラーとなりますよね。
トリガーラインとエントリーラインを分けないといけないことを失念していたため、使いやすい様にGUI操作側での根本的な修正を検討しております。
言葉で説明するにはいまいち分かりづらい注文方法のため簡単に動画にまとめてお見せできないことが残念です。
私の中ではこれだけでも優位性があり面白い注文方法だと考えているため是非実装したく思っております。
もう少し仕様が煮詰まってきましたら再度解説と動画でお見せしてみたいと思います。
戻指値に関しては丸々処理の変更があると思いますので主に戻指値に関しての解説として検討しています。
それでは今回はこのあたりで終わります。
今回はWindows10、MT4を例に作業していきます。
環境等の違いは適宜読み替えて利用してください。
①MT4のファイルメニューから「データフォルダを開く」をクリックします。
②MT4のインストールフォルダが開くため、「MQL4」を選択します。
③EAをインストールしたい場合は「Experts」、インジケーターをインストールしたい場合は「Indicators」のフォルダがコピー先の対象フォルダになります。
それぞれ利用したいファイルMT4の場合は「~.ex4」ファイル、MT5の場合は「~.ex5」ファイルをコピーします。
④コピーが完了したら導入完了です!お疲れさまでした!
文字ナビゲーターに表示されない場合は右クリックから「更新」を押下してください。
簡潔ですが以上になります。
また前回の続きの記事になります。
通常のエントリーの話をしても面白くないと思うので、特殊注文に触れてみようと思います。
タイトルの通りフィボナッチを利用したエントリーになります。
以前に書いた値幅計算の記事に基づいた分析をし、エントリーする時に便利に使える機能です。
具体的にどのような動きをしているのかというとフィボナッチエクスパンション(エクステンション)を利用し、指定した値幅位置にエントリーラインを移動させています。
これは非常によく使う手法のため、実現したかったエントリー方法の一つになります。
早速ですがどのようなシチュエーションで使うのか実例を挙げてみます。
まずはトレーディングビューのチャートで分析をしています。(もちろんMT4上からでも問題ありません。)
下降5波動に対してのA波(上昇5波動)、B波(下降3波動)の様なものが認識できます。
C波が完成した後の下降を狙います。
チャートの形としてはこの後汚くなっているので想定通りの動きをするのかはわかりませんが、「1.40351」が「N値(1:1)」の値幅とわかります。
細かい話をするとエリオット波動の話になるため省きますが、この時点でN値を達成した場合そこから反落するんじゃないか?と考えることができます。
M-FuncTradePanelを利用してエントリーしてみましょう。
※開発中の画面です。
①F-Exをクリックすると2本の縦線が表示されます。(水色は右ラインを表示するオプションがオンの意味です)
②左のラインまたは右のラインを操作すると2本のラインの間にフィボナッチエクスパンションを引いてくれます。
③F-Exの右にある入力欄の数値の位置にエントリーラインを自動で移動します。またslは初期設定値幅を利用します。
④現在ショートを狙っている位置なので「Sell」をクリックします。
これで簡単にエントリーできましたね。
※動画上クリック位置がずれていますが、キャプチャーの都合です。
実際は正しい位置をクリックしております。
ちょっと長いので省略しますが以下のようなイメージになります。
①縦ラインの範囲(左ラインのみ表示の場合は現在の足までの範囲)の高値、安値を探す。
②次点の高値もしくは安値を探す。(ここで3点が決まります。)
③3点目から1点目、2点目の値幅に倍数を掛けた値を足すもしくは引きます。
かいつまんでですがそんなイメージのコードです(要所要所)
if(id==CHARTEVENT_OBJECT_DRAG && (sparam == "FiboELeft" || sparam == "FiboERight"))
{
if(ObjectFind("Fibo-E") != EMPTY)
{
if(LowInd>HighInd)
{
ObjectDelete("Fibo-E");
CreateFibonacciExpansion(chartid,"Fibo-E",Time[LowInd],LowPrice,Time[HighInd],HighPrice,Time[LowInd0],LowPrice0);
FiboETime = Time[HighInd];
}
else
if(LowInd<HighInd)
{
ObjectDelete("Fibo-E");
CreateFibonacciExpansion(chartid,"Fibo-E",Time[HighInd],HighPrice,Time[LowInd],LowPrice,Time[HighInd0],HighPrice0);
FiboETime = Time[LowInd];
}
}
if(LowInd>HighInd)
objen = LowPrice0+((HighPrice - LowPrice) * StringToDouble(ObjectGetString(0,_TextFeLevel,OBJPROP_TEXT)));
if(LowInd<HighInd)
objen = HighPrice0-((HighPrice - LowPrice) * StringToDouble(ObjectGetString(0,_TextFeLevel,OBJPROP_TEXT)));
ChartRedraw();
ObjectDelete("en");
CreateTradeLine("en",objen,clrYellow,STYLE_SOLID);
if(MarketInfo(Symbol(),MODE_BID) < objen)
objsl = objen + PipsToPrice(StopLoss_Def);
else
objsl = objen - PipsToPrice(StopLoss_Def);
ObjectDelete("sl");
CreateTradeLine("sl",objsl,clrDeepPink,STYLE_SOLID);
BtnOrderType = "Limit";
ToggleButton(0,_BtnOrderLimit,1,clrPink,clrRed);
ChartRedraw();
}
自動でフィボナッチを引くことも可能なんですが、ジグザグベースやある範囲の高安ベースでその指定が難しいです。というか人間の思っているものと同じものになることは稀です。そのためラインで範囲を指定してその中から半自動で引いてくれる形にしました。
ここはまだまだ開発段階のものであり、今後の展望としては3点取れるためチャネルを引く拡張とリトレースメントの戻り範囲とエクスパンションの値幅位置が一致しているときのみエントリーできるようなエントリーロック、もしくはハイライト表示の様なものを考えております。
フィボナッチのラインごとに色を変えたく思っているのですが、どうやら1つのフィボナッチだけでは実現できなそうだったので、重ねてハイライト表示のみ別のオブジェクトとして処理をしようと思っていたりします。
このあたりについては実装しながら使いやすさを考えているのでどういう形に落ち着くかは未定です。
あくまで自分の使いやすいものを作っているつもりですが、やはりテスターさんなどがいると開発効率が上がったり案が増えたりしそうだなとは思ってます。
RCI3linesの天底を色付きで表示できます。
登録方法については【共通手順】インジケーター表示手順【Tradingview】を参考にしてください。
動作イメージは以下のURLから確認できます。
https://jp.tradingview.com/script/1momb58G/
ご存じの方が多いと思うので簡単に説明しますが、オシレーターになります。
3本のラインを利用して短期、中期、長期の振れ幅を示します。
必ず天底になるわけではありませんが、目安として見やすい様にと色を付けたものになります。
とても簡単ですが以上。
前回の記事の続きになります。
今回は機能からGUIが生えてきました。
最初はGUIなんて作る予定もなく思い付きで作り始めたため、何をどこまで作り込むか全然計画を立てていなかったためとても苦労しました。
もしこの記事を見た後に作成する方は最初にざっくりでいいので「必要な機能の洗い出し」と「GUIの設計」をすることをお勧めします。
1度情報をするべくざっくり大枠でほしいと思った機能が以下の通り
機能の詳細はまた別記事で解説します。
今回やらかした大きなことは作りながら考える、考えながら作る、あれもこれも作りたい・・・。
最初に形を考えずに欲しい機能欲しい機能と付けていったらあとから配置を変えるのが一苦労でした。
そのため一度スタートに戻って形から決めていきます。
いろんな描画ソフトで使いやすいものを試そうと思いましたが、調べたり覚えたり書いたりテストしたり全部自分でやっているためなかなか面倒です。
この時点で思った以上に大規模なプロジェクトになってまいりました。
そのため一番手軽に利用できそうなExcelをチョイス。
図形をセルに張り付く設定にして、ボタン類の配置を考えていきます。
またどのボタンがどのような挙動をするのかという洗い出しが必要になります。
オンオフトグルで切り替わるのか、押すと何かが変わるのか等・・・
理想でいうのならば「オブジェクトの種類」「変数名」「オブジェクトの挙動」「オブジェクトに与えられる機能」あたりも洗い出しておくと後々管理が楽でしょう。
実装してテストをしていくうちに使いやすい形が出てくると思うので最初はざっくり決めました。
大きく分けて通常のオブジェクトと標準ライブラリのDialogというものがあるようです。
もともと通常のオブジェクトとして作っていましたが、作り直しを考えている段階で標準機能としてGUIを作る事ができることに気づく。
試しに作ってみるが、慣れていないことと利用方法がイマイチ理解できず。
通常オブジェクトの場合は関数化して必要な値を与えることでボタン等が作成できるために工数が違いすぎる。
関数化できそうな事に気づくも構造体変数structの受け渡しが上手くできずに頓挫。
ネット上にもMT4でGUIを作るような資料は少なかったため後回しへ。
まだ全然理解できていませんがこのような感じで記述する必要がありそうです。
Create_LabelSymbolのほうが一般的にネット上で公開されている書式、Create_BtnTrapRepeatのほうが簡略化するために試行錯誤をしている形。
class CPanelDialog : public CAppDialog
{
private:
CLabel m_LabelSymbol;
CButton m_BtnTrapRepeat;
public:
CPanelDialog(void);
~CPanelDialog(void);
virtual bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);
protected:
bool Create_LabelSymbol(void);
bool Create_BtnTrapRepeat(string name1, string name2, string text, double x1, double y1, double x2,double y2);
};
bool CPanelDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
{
if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2)) return(false);
if( !Create_LabelSymbol())return (false);
if(!Create_BtnTrapRepeat(
"m_BtnTrapRepeat", "__BtnTrapRepeat", "Trap",
indent_left,
indent_top+full_height+controls_gap_y,
indent_left+full_width,
indent_top+full_height+controls_gap_y+full_height
)) return(false);
return(true);
}
CPanelDialog AppWindow;
bool CPanelDialog::Create_LabelSymbol(void)
{
int x1=indent_left;
int y1=indent_top;
int x2=x1+full_width;
int y2=y1+full_height;
if( !m_LabelSymbol.Create( m_chart_id, m_name + "m_LabelSymbol", m_subwin, x1, y1, x2, y2 ) ) return false;
if( !m_LabelSymbol.Text( StringConcatenate(Symbol()," ",PERIOD_CURRENT)) ) return false;
if( !Add( m_LabelSymbol ) ) return false;
return true;
}
bool CPanelDialog::Create_BtnTrapRepeat(string name1, string name2, string text, double x1, double y1, double x2,double y2)
{
if(!m_BtnTrapRepeat.Create(0,name2,0,x1,y1,x2,y2)) return(false);
if(!m_BtnTrapRepeat.Text(text)) return(false);
if(!Add(m_BtnTrapRepeat)) return(false);
return(true);
}
これについては力技で並べていくか、記述する行数が違いすぎるためもう少し効率的なやり方が必要に思えます。
苦労の末簡単な解決策はすぐに見つからなそうだったので、オブジェクトとして作成していくことに。
もともと途中まではオブジェクトで作成していったためつぎ足す形です。
最終的な配置については利用しながら使いやすさを考えていきます。
こういう感じで関数を作っておくとあとは必要な値を引数として渡すだけで作成ができます。
void CreateButton(string name, string label, int x, int y, int width, int height,
color bgColor = C'236,233,216', color textColor = clrBlack, int anchor = CORNER_RIGHT_UPPER)
{
ObjectCreate(name, OBJ_BUTTON, 0, 0, 0);
ObjectSet(name,OBJPROP_XDISTANCE,x+width);
ObjectSet(name,OBJPROP_YDISTANCE,y);
ObjectSet(name,OBJPROP_WIDTH,x);
ObjectSet(name,OBJPROP_XSIZE,width);
ObjectSet(name,OBJPROP_YSIZE,height);
ObjectSet(name, OBJPROP_CORNER, anchor);
ObjectSet(name, OBJPROP_BGCOLOR, bgColor);
ObjectSet(name, OBJPROP_COLOR, textColor);
ObjectSet(name, OBJPROP_ZORDER, 100);
ObjectSetText(name, label, FontSize);
}
void CreateLabel(string name, string label, int x, int y, int width, int height,
color bgColor = C'236,233,216', color textColor = clrBlack, int anchor = CORNER_RIGHT_UPPER)
{
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSet(name,OBJPROP_XDISTANCE,x+width);
ObjectSet(name,OBJPROP_YDISTANCE,y);
ObjectSet(name,OBJPROP_WIDTH,x);
ObjectSet(name,OBJPROP_XSIZE,width);
ObjectSet(name,OBJPROP_YSIZE,height);
ObjectSet(name, OBJPROP_CORNER, anchor);
ObjectSet(name, OBJPROP_BGCOLOR, bgColor);
ObjectSet(name, OBJPROP_COLOR, textColor);
ObjectSet(name, OBJPROP_ZORDER, 100);
ObjectSetText(name, label, FontSize);
}
最初にも書きましたが機能の洗い出しとGUIの設計は必ず最初にやろうです。
後からGUIの配置を変えることは想像を絶するくらいに苦痛です。
また次回に続きます。
現在注文ツールを作成しており、技術的な部分を含めて不定期更新しようかと思っております。
作成中の記事につきバグなどがある可能性が十分にあるため、そのままのコードを利用したい場合は注意してください。
また、今までに作成したコードをそのまま利用していたり、ほかサイトのコードを参考に作成している場合があるためコーディングの仕方が統一されていない場合があります、ご了承ください。
もとはといえば何がしたかったのかというと、「全ての通貨ペアポジション」に対する「ポジション管理機能」が欲しかっただけ。
エントリー後のポジション管理が甘く利益になったポジションを損失にしてしまうことが多かったため、強制的に「自動建値」を入れる機能があればマイナスは防げるかなと思ったからです。
ググっても自分の理想とする挙動のものが見つからないため、自分で作成しようと思いました。
そこからですが、紆余曲折あり今までにやりたかった機能を実装して注文ツールとして形にしようと考えています。
void OrderBuyEven(double point)
{
if(MarketInfo(OrderSymbol(), MODE_BID) - OrderOpenPrice() >= BeslAt * point)
{
if(OrderStopLoss() < OrderOpenPrice() && OrderStopLoss() != OrderOpenPrice() + Besl * point)
{
Print("建値+", Besl, " pips");
if(OrderLots() > 0.01)
{
ticket = OrderClose(OrderTicket(), NormalizeDouble(OrderLots() / Trades, NormDigit), MarketInfo(OrderSymbol(),MODE_BID), slippage, CLR_NONE);
Print("半利しました ",OrderSymbol()," - ",iClose(OrderSymbol(),0,0));
}
}
}
void OrderSellEven(double point)
{
if(OrderOpenPrice() - MarketInfo(OrderSymbol(), MODE_ASK) >= BeslAt * point)
{
if(OrderStopLoss() > OrderOpenPrice() && OrderStopLoss() != OrderOpenPrice() - (Besl + spread) * point)
{
Print("建値+", Besl, " pips");
if(OrderLots() > 0.01)
{
ticket = OrderClose(OrderTicket(), NormalizeDouble(OrderLots() / Trades, NormDigit), MarketInfo(OrderSymbol(),MODE_ASK), slippage, CLR_NONE);
Print("半利しました ",OrderSymbol()," - ",iClose(OrderSymbol(),0,0));
}
}
}
通貨ペアごとに違う設定の閾値と、sl幅を設定できるようにしています。
現実的な用途を考えた場合ボラティリティが違うのに同一設定では使いづらいからという考えのもと設定値を増やしております。
細かくこれがこの設定と言うまで細分化はしてませんが、ある程度の区分けとして低ボラ通貨ペア、並ボラ通貨ペア、高ボラ通貨ペア、超ボラ通貨ペアと分けられるようにしています。
細かい処理は省きますが、簡単に説明します。
という少し面倒な処理をしています。
for(int i=0; i<ArraySize(PairList); i++)
{
if(OrderSymbol() == PairList[i])
{
BeslAt= BeslAt_Low * 10;
Besl= Besl_Low * 10;
}
}
簡潔ですが今回はこのあたりまで。
まだ最終的な完成形ではないですが、少し違う形で機能ごとに無料公開を考えております。
もし詳細な情報を知りたい場合はこちらの記事やTwitter・Discordで質問をしていただくか、またはDiscordではリアルタイムで悩みながらコーディングをしているためそちらを参考にしていただければと思います。
TradingView用のインジケーター表示手順を示します。
基本的に無料で利用できます。
TradingViewのチャート画面よりこちらの「対象のインジケーター名」で検索してください。
今回は「Pullback easy to understand with GMMA」の場合を例として挙げます。
①画面の様に左側の検索窓に「対象のインジケーター名」を入力します。
②対象のインジケーターが表示されましたらクリックします。
③選択することにより、チャートに対象のインジケーターが表示されます。
mql上では最小単位として「point」という概念で値が扱われます。
一般的に言われるpipsとは桁が違う場合が多くります。
また、内部的な数値として小数点以下幾つも値を持っている場合がある。
mql4では定義済み変数として「表示している通貨ペアが取り扱う最小単位の値」、「表示している通貨ペアの精度(小数点以下桁数)」がある。
表示している通貨ペアが取り扱える最小単位の値
_Point;
Point();
表示している通貨ペアの精度
_Digits;
Digits();
もう少し使いやすくする場合は、
MarketInfo(Symbol(),MODE_POINT), Digits() ));
として指定した通貨ペアの情報を取得することが可能である。
基本的な考え方としては最小単位が1pips、ただし小数点が3桁、5桁ある通貨に関しては基準(Point)の10倍した数値が1pipsという認識でいいかと思います。
メジャー取引所での比較をしようと思ったのですが、主に金に対してのpipsが諸説あり基準が不明のために今回整理は端折ります。
その代わり実際にどう使えば良いのかを解説します。
必ず同一の取引所での利用ならば何も問題はありません。
上記の表が示す意味は取引所によって1pipsの桁が違うことがあるということです。
で、どうしたらいいかというと桁を合わせる処理を実装します。
この辺りはググればよくでてくるあたりの話です。
if(MarketInfo(Symbol(),MODE_POINT) == 3 || MarketInfo(Symbol(),MODE_POINT) == 5) {
point = _Point * 10.0;
} else {
point = _Point;
}
このコードがしている処理についてですが、あくまで小数点以下3桁、5桁の通貨ペアに対してはデフォルトのPoint数に10を掛けて桁を合わせています。
ですがこれでできることは雑に言うと為替だけの話です。
為替の場合取引所や通貨ペアの差が多くなく、ほぼこの処理だけを入れておくことで処理しきることができます。
しかしながら、CFDなどですと取引所や通貨ペアで値が変わる場合が間々あります。
整理すべく途中まで調べた結果ですが、例えばXMとGemforexのダウは「0.01」が最低数値ですが、TitanFXは「0.1」が最低数値だったりします。
そのため以下のような処理をして調整をします。
どちらに合わせるべきかというのは標準的な値を知りそちらに合わせるべきかと思います。
if(MarketInfo(Symbol(),MODE_POINT) == 3 || MarketInfo(Symbol(),MODE_POINT) == 5) {
point = _Point * 10.0;
} else if(AccountCompany() == "取引所名" && Symbol() == "通貨ペア名"){
point = _Point * 【調整係数】;
} else {
point = _Point;
}
ごちゃごちゃ長くなったのですが、いつも私がこのあたりで苦労するため簡単に調整値を出せるようにEA化しました。
左上にいろいろな情報を表示します。
右上のテキストボックスに「調整係数候補」の数値を入れると画面上の緑ライン、赤ラインが移動します。
0.01,0.1,1,10,100,1000等々。
表示されているラインがそれぞれ、「BID+差分pips」、「BID-差分pips」を表示しています。
デフォルトの値は50pipsにしてあります。
目的の値幅のラインが引ける値を探してください。
先述したとおり基本は10が入っていることで想定の値が表示されるはずです。
その値が「調整係数」となります。
Printボタンを押すことで下の条件文を下のターミナルに表示しますのでコピーして利用してください。
ここまで出来たら後は簡単。
例えばBidより20pips下の値段を計算したい場合はこの様に使ってください。
Print(Bid - 20 * point);
今現在私が最も信頼している手法です。
これは相場の原理原則といわれるものの一つであり、それを利用した手法です。
一度出た値幅は再度どこかで出やすいです。(もちろんぴったりというわけではありませんが)
フィボナッチリトレースメント、フィボナッチエクスパンション(エクステンション)の使い方だけ覚えればそれだけで大きくとれる部分が必ずあるはずです。
細かい理論は置いておいて何を使って何をしているのか、それだけでも覚えてください。
いわゆるこれだけは覚えて帰ってねという重要な話です。
今後ほかの手法について言及することはあるかもしれませんが、それについては有効性の高さからの手法ではなく考え方やとらえ方の一つと見ます。
あくまで今現在の考えですが、別の手法を解説する場合は使える方法としてではなく内容や考え方の解説するというイメージです。(決して使えないという意味ではないため)
ここで使うのは2つだけ、ほかのツールや使い方もありますがメインで使うものはフィボナッチエクスパンションとします。
基本的には0-1で引き戻りの値幅を測ります。
意識されやすい数値は0.382、0.5、0.618、付近。
逆に引いて先の値幅を見る(E値)場合やフィボナッチエクスパンションと同様の使い方をする場合もあります。
ある値幅をほかの始点から簡単に測ることができます。
主に1と1.618の値幅が意識されやすいです。
例えばこの赤線の値幅は同一です。
フィボナッチエクスパンションを利用すると簡単に同一の値幅を測ることができます。
左の黄色ラインと同一の値幅になるラインが水色の1表示の部分。
赤の1:1と青の1:1
黄緑の1:1.618がエクスパンションで引いた安値①、高値①、安値②
オレンジの200がリトレースメントを逆に当てた時のE値。
概ね似た値幅になります。
エクスパンションは安値①、高値①、安値②と「安値①~高値①の値幅を安値②から上に値幅を測ります」
リトレースメントは同じ考え方で行くと「安値①~高値①の値幅を高値①から上に値幅を測ります」
なぜそうなるかという話ですが、リトレースメントは0.618で戻りやすいという話を思い出せばわかりやすいと思います。
安値①~高値①の値幅を1としたときに、高値①~高値②の値幅を1と考えるのがE値です(リトレースメントを逆に当てた場合の考え方。)
1+1=2
安値①~高値①の値幅を1としたときに、安値②として0.618戻り、そこからの値幅を1.618とるわけですから概ね高値①から高値②までの値幅は1と考えられます。
1-0.618+1.618=2
V値、NT値もありますが割愛します。
長期時間足フィボナッチリトレースメントの戻り目安の「0.382」、「0.5」、「0.618」の位置に対して、短期時間足フィボナッチエクスパンションの「1:1」、「1:1.618」、が重なる場合反転しやすいポイントと見ます。
逆張りしやすいポイントですがあくまで逆張りになるためピンバー、トンカチ、カラカサ、はらみ足、つつみ足などが出たことを確認することを推奨します。
または維持率高めの幅広SL分割エントリー等。
このあたりに関してはトレードサポートツールを開発中です。