WPRはウィリアムさんが考案したレンジの表現
計算式は WPR = -(High-Bid)÷(High-Low)
High、Lowは期間中の最高値、最安値
0~-100を推移し 0~-20買われすぎ -80~-100売られすぎを表すオシレータです。
MQL4的には iWPR(_Symbol,PERIOD_CURRENT,20,0) こんな感じです。
ばらして書くとこうなります。
double H=High[iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,20,0)];
double L=Low[iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,20,0)];
double WPR=(H-L)?-(H-Bid)/(H-L)*100:50;
※H-Lが0の時は50にしています。
おそらく一番早いのは
double H=0,L=99999;
for(int i=0;i<20;i++)
{
H=H<High[i]?High[i]:H;
L=L>Low[i]?Low[i]:L;
}
double WPR=(H-L)?-(H-Bid)/(H-L)*100:50;
ここで話を最初に戻して、なぜ0~-100なのだろうか
0~100の方がシンプルでわかりやすい気がします。
ほかのオシレーターと式的に比較してみます。
LONGエントリー基準 インジケータ SHORTエントリー基準の順です。
30 RSI 70
-100 CCI 100
-100 WPR 0
ほとんどのオシレーターは数字が大きいほうがSHORT基準
>< 大なり小なりの向きをそろえるには確かに0~-100の方が理にかなっていますね。
ex) <>の向きが同じ
if(RSI > 70)ShortEntry();
if(WPR>-30)ShortEntry();
if(RSI < 30)LongEntry();
if(WPR<-70)LongEntry();
まぁ0~100で(Bid-L)/(H-L)をTACARANGEとして
if(TACAR>70)ShortEntry(); でもいい気がしますがw
2020年5月6日水曜日
2020年5月5日火曜日
スワップ、スプレッド、ストップレベルを一覧で出力 無料ソース公開
業者のごとに異なる3S
Spread Swap Stoplevel
すべての通貨ペアの3Sを一括で出力します。
①Spread:AskとBidの差手数料です。最低、平均、最高を出力
②Swap:金利です。LongとShortの差も手数料です。LongとShortを出力
③Stoplevel:現在の価格から一定幅のTP,SLを入れられなくします。高速取引防止のためのものですが、今時分入れているところは少ないですね。
出力先検討
コメント:◎作るのが簡単 リアルタイムで見れる ✖コピペ出力ができない。
プリント:◎作るのが簡単 △コピペできるがエクセル数値を取り出すのがひと手間
CSV出力:◎エクセルでいろいろ扱える △作るのが面倒
今回はCSVで作成します。
設定は計測回数(ティック数)です。
デフォルトは100回2分程度です。
コメントには何回計測したかを出力 100になるとファイルを書き込みEAは終了します。
ファイルは共通フォルダ>Files に入ります。
C:\Users\ユーザーネーム\AppData\Roaming\MetaQuotes\Terminal\Common\Files
メタエディターを立ち上げ「ファイル(F)]->「コモンデーターフォルダーを開く(T)」ー>Filesが簡単です。
ソースの特徴はSymbolsTotal(0)で通貨ペア数を取得 ちなみに0を1にすると気配値表示に表示されている数になります。
通貨ペア名はSymbolName(番号、0)で取得
#property strict
input int Count=100;
int Min[],Max[],Sum[];
int Cnt,SyT;
int OnInit()
{
SyT=SymbolsTotal(0);
ArrayResize(Min,SyT);
ArrayResize(Max,SyT);
ArrayResize(Sum,SyT);
return INIT_SUCCEEDED;
}
void OnTick()
{
Comment(++Cnt);
for(int i=0;i<SyT;i++)
{
int Sp=(int)MarketInfo(SymbolName(i,0),MODE_SPREAD);
if(!Min[i])Min[i]=Sp;
if(Min[i]>Sp)Min[i]=Sp;
if(Max[i]<Sp)Max[i]=Sp;
Sum[i]+=Sp;
}
if(Cnt>=Count)Write();
}
void Write()
{
int Handle=FileOpen("3S.csv",FILE_WRITE|FILE_CSV|FILE_COMMON);
FileWrite(Handle,"Pair,Spread Min,Spread Average,Spread Max,Swap Long,Swap Short,StopLevel");
for(int i=0;i<SyT;i++)
{
string Sym=SymbolName(i,0);
double Ave=(int)(Sum[i]/Cnt),
SwL=MarketInfo(Sym,MODE_SWAPLONG),
SwS=MarketInfo(Sym,MODE_SWAPSHORT),
Stl=MarketInfo(Sym,MODE_STOPLEVEL);
FileWrite(Handle,StringConcatenate(Sym,",",Min[i],",",Ave,",",Max[i],",",SwL,",",SwS,",",Stl));
}
FileClose(Handle);
ExpertRemove();
}
拡散・リツイートしていただけると嬉しいです(⋈◍>◡<◍)。✧♡
Spread Swap Stoplevel
すべての通貨ペアの3Sを一括で出力します。
①Spread:AskとBidの差手数料です。最低、平均、最高を出力
②Swap:金利です。LongとShortの差も手数料です。LongとShortを出力
③Stoplevel:現在の価格から一定幅のTP,SLを入れられなくします。高速取引防止のためのものですが、今時分入れているところは少ないですね。
出力先検討
コメント:◎作るのが簡単 リアルタイムで見れる ✖コピペ出力ができない。
プリント:◎作るのが簡単 △コピペできるがエクセル数値を取り出すのがひと手間
CSV出力:◎エクセルでいろいろ扱える △作るのが面倒
今回はCSVで作成します。
設定は計測回数(ティック数)です。
デフォルトは100回2分程度です。
コメントには何回計測したかを出力 100になるとファイルを書き込みEAは終了します。
ファイルは共通フォルダ>Files に入ります。
C:\Users\ユーザーネーム\AppData\Roaming\MetaQuotes\Terminal\Common\Files
メタエディターを立ち上げ「ファイル(F)]->「コモンデーターフォルダーを開く(T)」ー>Filesが簡単です。
ソースの特徴はSymbolsTotal(0)で通貨ペア数を取得 ちなみに0を1にすると気配値表示に表示されている数になります。
通貨ペア名はSymbolName(番号、0)で取得
#property strict
input int Count=100;
int Min[],Max[],Sum[];
int Cnt,SyT;
int OnInit()
{
SyT=SymbolsTotal(0);
ArrayResize(Min,SyT);
ArrayResize(Max,SyT);
ArrayResize(Sum,SyT);
return INIT_SUCCEEDED;
}
void OnTick()
{
Comment(++Cnt);
for(int i=0;i<SyT;i++)
{
int Sp=(int)MarketInfo(SymbolName(i,0),MODE_SPREAD);
if(!Min[i])Min[i]=Sp;
if(Min[i]>Sp)Min[i]=Sp;
if(Max[i]<Sp)Max[i]=Sp;
Sum[i]+=Sp;
}
if(Cnt>=Count)Write();
}
void Write()
{
int Handle=FileOpen("3S.csv",FILE_WRITE|FILE_CSV|FILE_COMMON);
FileWrite(Handle,"Pair,Spread Min,Spread Average,Spread Max,Swap Long,Swap Short,StopLevel");
for(int i=0;i<SyT;i++)
{
string Sym=SymbolName(i,0);
double Ave=(int)(Sum[i]/Cnt),
SwL=MarketInfo(Sym,MODE_SWAPLONG),
SwS=MarketInfo(Sym,MODE_SWAPSHORT),
Stl=MarketInfo(Sym,MODE_STOPLEVEL);
FileWrite(Handle,StringConcatenate(Sym,",",Min[i],",",Ave,",",Max[i],",",SwL,",",SwS,",",Stl));
}
FileClose(Handle);
ExpertRemove();
}
拡散・リツイートしていただけると嬉しいです(⋈◍>◡<◍)。✧♡
登録:
投稿 (Atom)