サクソバンクさんでトレーディングビュー(以下TV)がいよいよ本格稼働です。
TVはMT6?のようにWEBで完結できる今話題の最新ツールです。
また、日本株、米株、指数、為替、仮想通貨もすべて見ることが出来ます。
そして、なにより嬉しいのがPINEスクリプトで簡単にいろいろと作ることが出来ます。
PINEスクリプトは、ほぼEASYランゲージですね!
そしていよいよSAXOさんで使えるようになりました。
↓プレスリリース
https://prtimes.jp/main/html/rd/p/000000010.000023116.html
MT4の次はトレーディングビューかもしれませんね!!
2019年5月27日月曜日
発注時間検証!
本日は MT4の発注時間について検証をしてみました。
使った業者はFOREX EXCHANGEです。
発注すると「MT4クライアント(発注するPC)」⇒「MT4サーバー(FOREXEXCHANGE in TY3)」⇒「カバー先EDGE FRACE?」の順で発注が流れて発注がちゃんと出せたかが戻ってきます。
FOREX EXCHANGE EDGE共にNO LOOKですので、拒否されることはありません。
現在の環境の接続は5msです。
①指値発注
void OnTick()
{
for(int i=0;i<10;i++)
{
datetime AMSER=GetMicrosecondCount();
int d=OrderSend(Symbol(),OP_BUYSTOP,0.01,Ask+1,0,0,0,"Speed Test",998877);
Print(GetMicrosecondCount()-AMSER);
}
for(i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,0))continue;
if(OrderMagicNumber()!=998877)continue;
int x=OrderDelete(OrderTicket());
}
ExpertRemove();
}
②実発注
void OnTick()
{
for(int i=0;i<10;i++)
{
datetime AMSER=GetMicrosecondCount();
int d=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,Ask-0.02,Ask+0.02);
Print(GetMicrosecondCount()-AMSER);
}
ExpertRemove();
}
実発注の平均約780ms
みにくいのでEXCELにまとめました。
使った業者はFOREX EXCHANGEです。
発注すると「MT4クライアント(発注するPC)」⇒「MT4サーバー(FOREXEXCHANGE in TY3)」⇒「カバー先EDGE FRACE?」の順で発注が流れて発注がちゃんと出せたかが戻ってきます。
FOREX EXCHANGE EDGE共にNO LOOKですので、拒否されることはありません。
現在の環境の接続は5msです。
①指値発注
void OnTick()
{
for(int i=0;i<10;i++)
{
datetime AMSER=GetMicrosecondCount();
int d=OrderSend(Symbol(),OP_BUYSTOP,0.01,Ask+1,0,0,0,"Speed Test",998877);
Print(GetMicrosecondCount()-AMSER);
}
for(i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,0))continue;
if(OrderMagicNumber()!=998877)continue;
int x=OrderDelete(OrderTicket());
}
ExpertRemove();
}
指値の平均は約140ms
②実発注
void OnTick()
{
for(int i=0;i<10;i++)
{
datetime AMSER=GetMicrosecondCount();
int d=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,Ask-0.02,Ask+0.02);
Print(GetMicrosecondCount()-AMSER);
}
ExpertRemove();
}
実発注の平均約780ms
みにくいのでEXCELにまとめました。
かなり時間に差があります。
指値はMT4サーバーで処理 実発注になる時にEDGEに渡すのかもしれませんね。
FXEX社は指値で滑ることがあるのでそうかもしれません。
※FXEX社で滑るのはプラスも結構あります。
2019年5月24日金曜日
ひさびさのソースコード公開!!無料EAです。(可変グリッド)
EA EVERY
#property strict
input int Magic=999;
//USDJPY H1?
input double Lot=0.01;
input string Com="Every";
input double TP=0.01;
string S=_Symbol;
datetime AMSER;
void OnTick()
{
if(!Hour()||Hour()==1)return;
if(AMSER==Time[0])return;AMSER=Time[0];
double H=0,L=Bid*2,c;
for(int i=0;i<20;i++)
{
c=iClose(S,PERIOD_H1,i);
H=H<c?c:H;
L=L>c?c:L;
}
double Range=!(H-L)?0.5:(Bid-L)/(H-L);
bool Chk=true;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderMagicNumber()!=Magic)continue;
if(floor(Bid*100)/100<OrderOpenPrice()
&&OrderOpenPrice()<floor(Bid*100)/100+0.01
&&Range<0.3)Chk=false;
}
if(Chk)int d=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,Ask+TP,Com,Magic);
}
#property strict
input int Magic=999;
//USDJPY H1?
input double Lot=0.01;
input string Com="Every";
input double TP=0.01;
string S=_Symbol;
datetime AMSER;
void OnTick()
{
if(!Hour()||Hour()==1)return;
if(AMSER==Time[0])return;AMSER=Time[0];
double H=0,L=Bid*2,c;
for(int i=0;i<20;i++)
{
c=iClose(S,PERIOD_H1,i);
H=H<c?c:H;
L=L>c?c:L;
}
double Range=!(H-L)?0.5:(Bid-L)/(H-L);
bool Chk=true;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderMagicNumber()!=Magic)continue;
if(floor(Bid*100)/100<OrderOpenPrice()
&&OrderOpenPrice()<floor(Bid*100)/100+0.01
&&Range<0.3)Chk=false;
}
if(Chk)int d=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,Ask+TP,Com,Magic);
}
2019年5月21日火曜日
開発:コピーツール インジケータ 対策
前回はEAとして作られたコピーツール対策として自分以外のチャートを閉じる方法をご紹介しました。
1チャートに1EAしか適応できませんから、チャートが一つでしたら安心ですね!
いやいや、インディケーターとして同じチャートに出しちゃえばいいじゃんという声が聞こえてきそうです。
そこで!!
for(int j=ChartGetInteger(0,CHART_WINDOWS_TOTAL)-1;j>=0;j--)for(int i=ChartIndicatorsTotal(0,j)-1;i>=0;i--)ChartIndicatorDelete(0,j,ChartIndicatorName(0,j,i));
同じチャートのメインチャートとサブチャートすべてのインジケーターを外してしまいましょう!!
チャートの数(サブウィンドウ+メインウィンドウ)の数だけループします=J
各チャートのインジケータの数だけループします=i
インジケーターを消します。消す対象はショートネームを参照しますが、
ショートネームが無くても大丈夫です!!
※strict モードの場合
コンパイル時に丸めるよと警告が出ます。
ChartGetInteger(0,CHART_WINDOWS_TOTAL)の戻り値の型の問題です。
気になる日とは(int)を付けて下さい!!
1チャートに1EAしか適応できませんから、チャートが一つでしたら安心ですね!
いやいや、インディケーターとして同じチャートに出しちゃえばいいじゃんという声が聞こえてきそうです。
そこで!!
for(int j=ChartGetInteger(0,CHART_WINDOWS_TOTAL)-1;j>=0;j--)for(int i=ChartIndicatorsTotal(0,j)-1;i>=0;i--)ChartIndicatorDelete(0,j,ChartIndicatorName(0,j,i));
同じチャートのメインチャートとサブチャートすべてのインジケーターを外してしまいましょう!!
チャートの数(サブウィンドウ+メインウィンドウ)の数だけループします=J
各チャートのインジケータの数だけループします=i
インジケーターを消します。消す対象はショートネームを参照しますが、
ショートネームが無くても大丈夫です!!
※strict モードの場合
コンパイル時に丸めるよと警告が出ます。
ChartGetInteger(0,CHART_WINDOWS_TOTAL)の戻り値の型の問題です。
気になる日とは(int)を付けて下さい!!
開発:コピーツールEA対策
EA販売者にとってコピーツールは厄介な物です。
1つEAを購入してロット上限までいくとコピーツールでもう一つ上限までエントリーといったところでしょうか。あまりやると板が無くなってしまうかもしれません。
もしくはロット上限のあるサンプルEAをコピーして大量に発注
こうゆう事を懸念すると、サンプルなどが出しにくくなってしまいますね。
メジャーなやり方の一つはMT4を一つ立ち上げて、チャートを2枚表示。
1つのチャートには動かすEAをセット、
もう一つのチャートにはコピーEAをセット
対策:
他のチャートのEAを排除する事は出来ません。
そこで、自分以外のチャートを全部閉じてしまいましょう^^
コード
while(ChartNext(ChartID())!=-1)ChartClose(ChartNext(ChartID()));
ChartID()はセットしたチャートのIDが取得できます。
ChartNext()は渡したIDの次のチャートIDを返します。
渡したIDが最後の場合-1が戻ってきます。
そして、ChartClose()で次のチャートを閉じでしまいます。
どうでしょうー
1つEAを購入してロット上限までいくとコピーツールでもう一つ上限までエントリーといったところでしょうか。あまりやると板が無くなってしまうかもしれません。
もしくはロット上限のあるサンプルEAをコピーして大量に発注
こうゆう事を懸念すると、サンプルなどが出しにくくなってしまいますね。
メジャーなやり方の一つはMT4を一つ立ち上げて、チャートを2枚表示。
1つのチャートには動かすEAをセット、
もう一つのチャートにはコピーEAをセット
対策:
他のチャートのEAを排除する事は出来ません。
そこで、自分以外のチャートを全部閉じてしまいましょう^^
コード
while(ChartNext(ChartID())!=-1)ChartClose(ChartNext(ChartID()));
ChartID()はセットしたチャートのIDが取得できます。
ChartNext()は渡したIDの次のチャートIDを返します。
渡したIDが最後の場合-1が戻ってきます。
そして、ChartClose()で次のチャートを閉じでしまいます。
どうでしょうー
2019年5月14日火曜日
開発:アイデア!スプレッドチェックについて
開発のアイデアです。
スプレッド上限のロックにこんなソースを使っています。
input int Spread_Limit = 10;
if(MarketInfo(Symbol(),MODE_SPREAD)>Spread_Limit)return;
// ここから発注ロジック
スプレッド上限のロックにこんなソースを使っています。
input int Spread_Limit = 10;
if(MarketInfo(Symbol(),MODE_SPREAD)>Spread_Limit)return;
// ここから発注ロジック
スプレッド20で試験をする時には 設定を変更してからテスト開始します。
しかし、かなりよくやってしまうのが、テスターのスプレッドを20に上げて、設定は10のまま試験を開始!!
全く取引していない結果を見て設定を20に変更し再度テスト!!
そこで!
if(s<MarketInfo(Symbol(),MODE_SPREAD)&&!IsTesting())return;
こうすれば、バックテストの時はスプレッド上限を回避できますね。
小ネタでした!
登録:
投稿 (Atom)