2018年7月30日月曜日

発注ルーチンの考察

発注に関しては戻り値を無視してのOrderSendをよく使用します。
理由は二つです。
①発注の失敗をほとんど見たことがない
②発注に失敗しても次回のティックで発注するだろう

①について
同じEAを同じブローカーでたくさんまわしています。
発注が足りないことがかなりよくあります。
しかし、エキスパートなどにエラーが書き込まれていません。
これはOrderSendが失敗したのではなくティック配信が届いていないと考えられます。

発注の失敗をみたのはAMSERの注文が集中した時くらいです。

②について
一定の条件を満たすと発注するのですが、例えばRSIが30を下回ったらロングでエントリーします。
ここで発注に失敗した時に無抵抗で何もしません。
次のティックがきた時に同じ条件下(RSIが30を下回っている)なら発注すればいいし、条件が変わっていなければ発注しなくてもいいと考えています。

EAによっては発注を失敗(OrderSend由来)した時に再発注したい時があります。


色々な書き方がありますが、発注失敗したら5回繰り返す場合を作成しました。
引数受け取りに見せかけて変数の宣言、代入をしています。


void EntryLong(int cnt=5)
{
if(OrderSend(Symbol(),OP_BUY,1,Ask,5,0,0)==-1&&cnt>0)EntryLong(cnt-1);
}
シンプルですがこの場合必ず関数を作成する必要があります。

今度はwhileを使用します。

void EntryLong2(int cnt=5)
{
while(OrderSend(Symbol(),OP_BUY,1,Ask,5,0,0)==-1&&cnt>0)cnt--;
}

こちらの場合cntを宣言、代入しておけばwhile内で完結しているので関数を作る必要がありません。文字数も節約できます。




余談ですがMZ-721にはHu-BASIC(ハドソン作成マイクロソフト系)とS-BASIC(SHARP系)が付いていました。
マニュアルには両方ともwhileはなかったのですが、Hu-BASICは使用できました。
ハドソンは進んでいましたね~みそらーめんグループまだあるのかな



2018年7月13日金曜日

ティック配信数比較

過去10年で1分間の平均ティックは約63回です。

ティックの配信数は業者ごとに異なります。

私の印象ではティック回数が多い業者は高速取引に向き、
少ない業者はトレイルなどが有利になります。

そこで何社かのティック配信回数を調べてみました。
MT4のティックは取引量ではなく、ティック数です。

ヒストリカルから各社のティックを取り出してみました。
左からEZインベスト証券、楽天、FXTF、OANDATY3に3コースです。

ティック数が一番多いのはEZインベスト証券です。
高速取引には取引には向いているのかもしれませんね!

逆に一番少ないのはFXTF半分以下です。
レートの配信が少ないという事はアービ向きかもしれませんね。

以外なのは楽天です。楽天のMT4はCPUにかなり負荷をかけるので、

余り配信をしていないと考えていたのですが、

OANDAと同じ程度あるのですね。←本当に意外でした。




2018年7月10日火曜日

HK プロフィットファクター 44万!!

HKと聞いて香港を思い浮かべる人はおそらくAge of Empireの勇者でしょう!

マイクロソフトの最高傑作はWINDOWSでもEXCELでもない!!

そう、Age of Empire でした。

当時64kのISDNテレホタイムに参戦すると

HK~といった名前の集団がいました。

つよかったな~

因みに飛行機の修行僧たちはHKGと呼びます。

修行たのしかったなぁ~

話がそれました。

われわれ為替人はHKDですね御pジュ

EZインベスト証券のUSDHKDのEAを開発しています。

香港ドルはUSDに上下ペッグしています。

幅は7.75~7.85 たまに下限は割ることがありますが

上限は死守されます。

上限を超えた時にはスイスフランショックどころでは無いビックイベントです。

さて、上下が決まっているとなればやることは一つですね。

グリッドトレードです。

上限を超えた時の為にロングのみでやりましょう

他社でもUSDHKDを取り扱っている会社はありますが

USDHKD ロングでスワップが付くのはEZインベスト証券以外は知りません。

さらにEZインベスト証券はMT4が使えサーバーも軽く、TY3に入っています。

素晴らしいですね!

ここで適当に十数個ほどEAを作ってみました。

成績を見比べていると!!

PFが44万!!!

PFや勝率だけで話をするのはナンセンスというのが持論ですが

これはハマってしまいそうです。

いやいや、本質は純益ですよね



2018年7月7日土曜日

OANDA 価格チェッカー 七夕バージョン

OANDA TY3にUSDJPYは3つあります。
TY3をじつは先行で使わせてもらっていたのですが
そのころに疑問が二つ
①TY3内でアービトラージできるのではないか?
②桁数がおかしいのでは?

①は昨年は出来ていたのですが、できなくなってしまいました。
私のせいかも・・・

②こちらについてはTY3一般公開前にOANDA社にお伝えしたのですが、
未だ直っていないようですね。

下記 ソースでTY3 3コースの価格(Bid,Ask)をコメントとラインで表示します。
USDJPYは正常に動くのですが一部の通貨では挙動がおかしくなります。
BID,ASKでは3桁5桁なのですがiCloseを使用すると4桁しか配信されないのが欠点ですね。




#property copyright "Copyright 2018/7/7,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
string Broker[6];
double Rate[6],MaxAb=1;
string OANDAPair;
color Color[6];
ENUM_LINE_STYLE Style[6];
void OnInit()
{
Broker[0]="OANDA5kBid";Color[0]=clrRed;Style[0]=STYLE_DOT;
Broker[1]="OANDA5kAsk";Color[1]=clrRed;Style[1]=STYLE_DOT;
Broker[2]="OANDA1mBid";Color[2]=clrYellow;Style[2]=STYLE_DASH;
Broker[3]="OANDA1mAsk";Color[3]=clrYellow;Style[3]=STYLE_DASH;
Broker[4]="OANDA3mBid";Color[4]=clrWhite;Style[4]=STYLE_DASHDOTDOT;
Broker[5]="OANDA3mAsk";Color[5]=clrWhite;Style[5]=STYLE_DASHDOTDOT;
OANDAPair=StringSubstr(Symbol(),0,6);
Rate[0]=iClose(OANDAPair+".oj5k",PERIOD_CURRENT,0);
Rate[1]=iClose(OANDAPair+".oj5k",PERIOD_CURRENT,0)+MarketInfo(OANDAPair+".oj5k",MODE_SPREAD)*Point;
Rate[2]=iClose(OANDAPair+".oj1m",PERIOD_CURRENT,0);
Rate[3]=iClose(OANDAPair+".oj1m",PERIOD_CURRENT,0)+MarketInfo(OANDAPair+".oj1m",MODE_SPREAD)*Point;
Rate[4]=iClose(OANDAPair+".oj3m",PERIOD_CURRENT,0);
Rate[5]=iClose(OANDAPair+".oj3m",PERIOD_CURRENT,0)+MarketInfo(OANDAPair+".oj3m",MODE_SPREAD)*Point;
MaxAb=1;
}

void OnTick()
{
ObjectsDeleteAll();
for(int i=0;i<=5;i++)
{
Rate[0]=iClose(OANDAPair+".oj5k",PERIOD_CURRENT,0);
Rate[1]=iClose(OANDAPair+".oj5k",PERIOD_CURRENT,0)+MarketInfo(OANDAPair+".oj5k",MODE_SPREAD)*Point;
Rate[2]=iClose(OANDAPair+".oj1m",PERIOD_CURRENT,0);
Rate[3]=iClose(OANDAPair+".oj1m",PERIOD_CURRENT,0)+MarketInfo(OANDAPair+".oj1m",MODE_SPREAD)*Point;
Rate[4]=iClose(OANDAPair+".oj3m",PERIOD_CURRENT,0);
Rate[5]=iClose(OANDAPair+".oj3m",PERIOD_CURRENT,0)+MarketInfo(OANDAPair+".oj3m",MODE_SPREAD)*Point;
ObjectDelete(Broker[i]);
ObjectCreate(Broker[i],OBJ_HLINE,0,0,Rate[i]);
ObjectSet(Broker[i],OBJPROP_COLOR,Color[i]);
ObjectSet(Broker[i],OBJPROP_STYLE,Style[i]);
  double MaxBid,MinAsk;
  if(Rate[0]>=Rate[2])MaxBid=Rate[0]; else MaxBid=Rate[2];
  if(MaxBid<Rate[4])MaxBid=Rate[4];
  if(Rate[1]<Rate[3])MinAsk=Rate[1]; else MinAsk=Rate[3];
  if(MinAsk>Rate[5])MinAsk=Rate[5];
  if(MaxAb>MinAsk-MaxBid)MaxAb=MinAsk-MaxBid;
  Comment ("Bid    Ask\noj5k : ",Rate[0]," ",Rate[1]
  ,"\noj1m : ",Rate[2]," ",Rate[3]
  ,"\noj3m : ",Rate[4]," ",Rate[5]
  ,"\nMaxBid : ",MaxBid," MinAsk : ",MinAsk," Ab : ",MinAsk-MaxBid
  ,"\nMaxAb : ",MaxAb);
}
}

2018年7月5日木曜日

NY クローズの誤解

 過去データーを分析するとNYクローズの時間必ず価格が下がります。

スプレッドが上がる中これを何とか取れないものかと分析をしていました。
※下図)NYクローズ時のBid

①スプレッドが上がる前にエントリー
②NYクローズ直前にクローズ

これで取れるのではないでしょうか
GMOクリック証券ではAskのチャートを見ることが出来ます。
これを早起きして観察してみました。

この日スプレッドが上がるのは5:58からでした。
そして順調にBidが下がっていきます。

Askを見てみましょう
※下図)NYクローズ時のAsk




スケールが合わさらなかったので見にくいのですが、
スプレッド拡張からBidの下がりと対照的にAskが上がっています。

これでは戦略の立てようがありませんね。

いや、雇用統計戦略を応用して57分にLONG・・・
何かが見えた気がしました!