最近のWINDOWSは気が付かないうちにアップデートされていることがよくあります。
私のWINDOWS10も最近アップデートされたようです。
バージョンは 1709 OSビルドは16299.431
バージョンなどは菱形が四つ並んだWindowsボタンをくりっく、歯車の設定、バージョン情報で確認できます。
さて今回のアップデート後にVPSにつながらないといった事象があちこちで起こっているようです。
正確にはVPSは正常動作しているがLOGINできないといった事です。
ログインしようとするとこの様なエラーが出ます。
少なくとも数社のVPS事業者でこのエラーが出ると報告を受けました。
ただ、おなじ会社のVPSでもエラーが出るVPSと出ないVPSがあります。
調査してみると、Mクロソフト社がやらかしたようです。
CredSSPの脆弱性の更新があり、暗号化が変わりました。
クライアントとVPSの一方のみアップデートされているとこのエラーが表示されます。
古い暗号方式と新しい暗号方式では理解しあえないのでしょうか
つながらなくなった時はVPS会社に連絡をしてサーバーのWINDOWSをアップしてもらいましょう
レジストリーはいじっちゃだめですよ^^
2018年5月30日水曜日
BEEKSのRDP Managerが便利!
本日、BEEKS社の代表と少しチャットをしました。
いつもお願い事ばかりで申し訳ないのですが今日も素敵な対応を、ありがたや♪
BEEKS社のVPSを3個ほど借りています。
VPSの起動にはRDPファイルを作成しwクリックでログインをしていたのですが、
アイコンがいくつもデスクトップを占領するのはなかなか厄介です。
そんなカユイところに手の届くツールを教えていただきました。
RDP Manegerです!
https://www.support.beeksfinancialcloud.jp/rdp-manager
何かというと複数のVPS/RDPを一つで管理するツールです。
画面はシンプル
VPSの名前を付けて IP PORT ユーザー名 PWを入れて登録を押します。
右に名前が表示されます。
右の名前をwクリックすれば接続されます。
一度登録すればあとは面倒な入力の必要がありません。
これは便利ですね~♪
いつもお願い事ばかりで申し訳ないのですが今日も素敵な対応を、ありがたや♪
BEEKS社のVPSを3個ほど借りています。
VPSの起動にはRDPファイルを作成しwクリックでログインをしていたのですが、
アイコンがいくつもデスクトップを占領するのはなかなか厄介です。
そんなカユイところに手の届くツールを教えていただきました。
RDP Manegerです!
https://www.support.beeksfinancialcloud.jp/rdp-manager
何かというと複数のVPS/RDPを一つで管理するツールです。
画面はシンプル
VPSの名前を付けて IP PORT ユーザー名 PWを入れて登録を押します。
右に名前が表示されます。
右の名前をwクリックすれば接続されます。
一度登録すればあとは面倒な入力の必要がありません。
これは便利ですね~♪
2018年5月24日木曜日
SWAPその後
イメージ通りではなかなかうまくいきません。
出来たのはこんな感じです。
input int Magic=316;
sinput string Comments="Swap-4Pair";
//0:NZDJPY 1:EURCADs 2:USDCHF 3:GBPAUDs;
string Pair[4]={"NZDJPY.oj5k","EURCAD.oj5k","USDCHF.oj5k","GBPAUD.oj5k"};
int d,i,cPos[4];
double Price[4];
void OnTick()
{
Price[0]=MarketInfo(Pair[0],MODE_ASK);
Price[1]=MarketInfo(Pair[1],MODE_BID);
Price[2]=MarketInfo(Pair[2],MODE_ASK);
Price[3]=MarketInfo(Pair[3],MODE_BID);
for(i=0;i<4;i++){cPos[i]=0;}
for(i=OrdersTotal()-1;i>=0;i--)
{
d=OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber()==Magic)
{
string OS=OrderSymbol();
if(OS==Pair[0]){cPos[0]++;}
if(OS==Pair[1]){cPos[1]++;}
if(OS==Pair[2]){cPos[2]++;}
if(OS==Pair[3]){cPos[3]++;}
}
}
if(!cPos[0]&&MarketInfo(Pair[0],MODE_SPREAD)<13)d=OrderSend(Pair[0],OP_BUY,0.1,Price[0],5,0,Price[0]*1.01,Comments,Magic);
if(!cPos[1]&&MarketInfo(Pair[1],MODE_SPREAD)<19)d=OrderSend(Pair[1],OP_SELL,0.1,Price[1],5,0,Price[1]*0.99,Comments,Magic);
if(!cPos[2]&&MarketInfo(Pair[2],MODE_SPREAD)<12)d=OrderSend(Pair[2],OP_BUY ,0.1,Price[2],5,0,Price[2]*1.01,Comments,Magic);
if(!cPos[3]&&MarketInfo(Pair[3],MODE_SPREAD)<23)d=OrderSend(Pair[3],OP_SELL,0.1,Price[3],5,0,Price[3]*0.99,Comments,Magic);
}
10年ほど4通貨でバックテストをし合成したのがこちら
初期証拠金1,000,000円
一定額の利益が出れば利確&再オーダー
最大ポジションは各ペア1個x4です。
10年で金利が変わらなければ367%の利益です。
こつこつとスワップは取れるのですが何年かすると利確&再オーダーはストップします。
NYクローズ直前のオーダーやインジケータを使用してもよかったかもしれません。
取りあえずまわしてみようかな♪
出来たのはこんな感じです。
input int Magic=316;
sinput string Comments="Swap-4Pair";
//0:NZDJPY 1:EURCADs 2:USDCHF 3:GBPAUDs;
string Pair[4]={"NZDJPY.oj5k","EURCAD.oj5k","USDCHF.oj5k","GBPAUD.oj5k"};
int d,i,cPos[4];
double Price[4];
void OnTick()
{
Price[0]=MarketInfo(Pair[0],MODE_ASK);
Price[1]=MarketInfo(Pair[1],MODE_BID);
Price[2]=MarketInfo(Pair[2],MODE_ASK);
Price[3]=MarketInfo(Pair[3],MODE_BID);
for(i=0;i<4;i++){cPos[i]=0;}
for(i=OrdersTotal()-1;i>=0;i--)
{
d=OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber()==Magic)
{
string OS=OrderSymbol();
if(OS==Pair[0]){cPos[0]++;}
if(OS==Pair[1]){cPos[1]++;}
if(OS==Pair[2]){cPos[2]++;}
if(OS==Pair[3]){cPos[3]++;}
}
}
if(!cPos[0]&&MarketInfo(Pair[0],MODE_SPREAD)<13)d=OrderSend(Pair[0],OP_BUY,0.1,Price[0],5,0,Price[0]*1.01,Comments,Magic);
if(!cPos[1]&&MarketInfo(Pair[1],MODE_SPREAD)<19)d=OrderSend(Pair[1],OP_SELL,0.1,Price[1],5,0,Price[1]*0.99,Comments,Magic);
if(!cPos[2]&&MarketInfo(Pair[2],MODE_SPREAD)<12)d=OrderSend(Pair[2],OP_BUY ,0.1,Price[2],5,0,Price[2]*1.01,Comments,Magic);
if(!cPos[3]&&MarketInfo(Pair[3],MODE_SPREAD)<23)d=OrderSend(Pair[3],OP_SELL,0.1,Price[3],5,0,Price[3]*0.99,Comments,Magic);
}
10年ほど4通貨でバックテストをし合成したのがこちら
初期証拠金1,000,000円
一定額の利益が出れば利確&再オーダー
最大ポジションは各ペア1個x4です。
10年で金利が変わらなければ367%の利益です。
こつこつとスワップは取れるのですが何年かすると利確&再オーダーはストップします。
NYクローズ直前のオーダーやインジケータを使用してもよかったかもしれません。
取りあえずまわしてみようかな♪
iMAonArray()関数って・・・
iMAonArray()関数は配列を平均化するのに使用します。
例えば自分でインジケーターを作成した時になめらかさが欲しい時にはこの関数で平均化して滑らかにします。
T3(三回使っています)やHMAなどを求めるのには大変便利な関数です。
今日は開発中に全角で入力してしましました。
全角カタカナではこんな感じです。
i ma o na rra y
していません・・・
さて、つまらないネタで失礼しました。
前回のスワップの自動発注ものを作りました。
input int Magic=316;
sinput string Comments="Swap-4Pair";
sinput string NZDJPY="NZDJPY.oj5k";
sinput string EURCAD="EURCAD.oj5k";
sinput string USDCHF="USDCHF.oj5k";
sinput string GBPAUD="GBPAUD.oj5k";
int d,j,OldMonth,i,cPos[4];//0:NZDJPY 1:EURCADs 2:USDCHF 3:GBPAUDs;
datetime OldTime;
bool Flag;
void OnTick()
{
double NJ=MarketInfo(NZDJPY,MODE_ASK);
double EC=MarketInfo(EURCAD,MODE_BID);
double UC=MarketInfo(USDCHF,MODE_ASK);
double GA=MarketInfo(GBPAUD,MODE_BID);
//Mon Chk
if(Month() != OldMonth)
{
OldMonth = Month();
Flag = true;
}
else
Flag = false;
//Mon Ord
if(Flag)
{
if(MarketInfo(NZDJPY,MODE_SPREAD)<=12)
d=OrderSend(NZDJPY,OP_BUY,0.1,NJ,5,0,NJ+1,Comments,Magic);
if(MarketInfo(EURCAD,MODE_SPREAD)<=18)
d=OrderSend(EURCAD,OP_SELL,0.1,EC,5,0,EC-0.01,Comments,Magic);
if(MarketInfo(USDCHF,MODE_SPREAD)<=11)
d=OrderSend(USDCHF,OP_BUY ,0.1,UC,5,0,UC+0.01,Comments,Magic);
if(MarketInfo(GBPAUD,MODE_SPREAD)<=22)
d=OrderSend(GBPAUD,OP_SELL,0.1,GA,5,0,GA-0.01,Comments,Magic);
Flag = false;
}
//Pos Chk
for(i=0;i<4;i++)cPos[i]=0;
for(i=OrdersTotal()-1;i>=0;i--)
{
d=OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber()==Magic)
{
if(OrderSymbol()==NZDJPY)cPos[0]++;
if(OrderSymbol()==EURCAD)cPos[1]++;
if(OrderSymbol()==USDCHF)cPos[2]++;
if(OrderSymbol()==GBPAUD)cPos[3]++;
}
}
//!Pos Ord
if(!cPos[0])d=OrderSend(NZDJPY,OP_BUY,0.1,NJ,5,0,NJ+1,Comments,Magic);
if(!cPos[1])d=OrderSend(EURCAD,OP_SELL,0.1,EC,5,0,EC+0.01,Comments,Magic);
if(!cPos[2])d=OrderSend(USDCHF,OP_BUY ,0.1,UC,5,0,UC+0.01,Comments,Magic);
if(!cPos[3])d=OrderSend(GBPAUD,OP_SELL,0.1,GA,5,0,GA+0.01,Comments,Magic);
}
成績はまた次回~
例えば自分でインジケーターを作成した時になめらかさが欲しい時にはこの関数で平均化して滑らかにします。
T3(三回使っています)やHMAなどを求めるのには大変便利な関数です。
今日は開発中に全角で入力してしましました。
全角カタカナではこんな感じです。
i ma o na rra y
していません・・・
さて、つまらないネタで失礼しました。
前回のスワップの自動発注ものを作りました。
input int Magic=316;
sinput string Comments="Swap-4Pair";
sinput string NZDJPY="NZDJPY.oj5k";
sinput string EURCAD="EURCAD.oj5k";
sinput string USDCHF="USDCHF.oj5k";
sinput string GBPAUD="GBPAUD.oj5k";
int d,j,OldMonth,i,cPos[4];//0:NZDJPY 1:EURCADs 2:USDCHF 3:GBPAUDs;
datetime OldTime;
bool Flag;
void OnTick()
{
double NJ=MarketInfo(NZDJPY,MODE_ASK);
double EC=MarketInfo(EURCAD,MODE_BID);
double UC=MarketInfo(USDCHF,MODE_ASK);
double GA=MarketInfo(GBPAUD,MODE_BID);
//Mon Chk
if(Month() != OldMonth)
{
OldMonth = Month();
Flag = true;
}
else
Flag = false;
//Mon Ord
if(Flag)
{
if(MarketInfo(NZDJPY,MODE_SPREAD)<=12)
d=OrderSend(NZDJPY,OP_BUY,0.1,NJ,5,0,NJ+1,Comments,Magic);
if(MarketInfo(EURCAD,MODE_SPREAD)<=18)
d=OrderSend(EURCAD,OP_SELL,0.1,EC,5,0,EC-0.01,Comments,Magic);
if(MarketInfo(USDCHF,MODE_SPREAD)<=11)
d=OrderSend(USDCHF,OP_BUY ,0.1,UC,5,0,UC+0.01,Comments,Magic);
if(MarketInfo(GBPAUD,MODE_SPREAD)<=22)
d=OrderSend(GBPAUD,OP_SELL,0.1,GA,5,0,GA-0.01,Comments,Magic);
Flag = false;
}
//Pos Chk
for(i=0;i<4;i++)cPos[i]=0;
for(i=OrdersTotal()-1;i>=0;i--)
{
d=OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber()==Magic)
{
if(OrderSymbol()==NZDJPY)cPos[0]++;
if(OrderSymbol()==EURCAD)cPos[1]++;
if(OrderSymbol()==USDCHF)cPos[2]++;
if(OrderSymbol()==GBPAUD)cPos[3]++;
}
}
//!Pos Ord
if(!cPos[0])d=OrderSend(NZDJPY,OP_BUY,0.1,NJ,5,0,NJ+1,Comments,Magic);
if(!cPos[1])d=OrderSend(EURCAD,OP_SELL,0.1,EC,5,0,EC+0.01,Comments,Magic);
if(!cPos[2])d=OrderSend(USDCHF,OP_BUY ,0.1,UC,5,0,UC+0.01,Comments,Magic);
if(!cPos[3])d=OrderSend(GBPAUD,OP_SELL,0.1,GA,5,0,GA+0.01,Comments,Magic);
}
成績はまた次回~
余剰必要証拠金のスワップ
現在日本国内のFXのレバレッジは個人25倍 法人約50倍(変動)です。
Vシステム(フルレバ?)が好きな私ですが、最近はかなりの余剰が残っています。
基本的に物価が上がっていく以上フィアット(法定通貨)の価値は下がっていきます。
今100万円で買えるものは、10年後に100万円では買えないという事です。
そこで余剰証拠金でスワップをのんびり稼ぎたいと思います。
そんな時に素敵なサイトを見つけました。
OANDAさんです。https://www.oanda.jp/lab-education/simulator/
スワップの自動計算器です。
例えばUSD/JPYの100万円、25倍、1年を選択し「計算を開始する」をクリックしますね。
色々と情報が出てきます。
取引数量 227,000
1日のスワップ 1,407円
一年後時点 513,701円
今回は10,000通貨ペアの毎月購入を考えてみます。
取引数量227,000 ÷ 10,000 = 22.7
1日のスワップ 1,407 ÷ 22.7 = 61.98
一年後時点 513,701 ÷ 22.7 = 22,630
1万通貨ペアに必要な証拠金は 109.6 × 10,000ペア ÷ 25(レバ)= 43,840円
証拠金は125円まで上がれば50,000円になります。
また、10,000USDJPYは10円下がると10万円下がります。
10万円 + 5万円 = 15万円 がスタート金額です。
また折角ですので1円上がったら利確・リオーダーします。
毎月一回コツコツと購入する事にします。
また、このシステムはなぜかショートの計算が出来ません。
ショートはMT4から買いスワップ、売りスワップを計算して算出します。
高金利通貨 AUD,NZD、CAD,USD
低金利もしくはマイナスのJPY,EUR,CHF,GBPこの組み合わせをします。
この中から4つのペアを組み合わせます。
通貨ペアの年間スワップです。
空欄はOANDA TY3で取り扱いの無いペア
NZDはJPYしかありませんのでNZDJPYは決定です。
CADはEURとJPYのぺアがありますがJPYは使いましたのでEURCADショートです。
残りは二通り組み合わせがありますが合計スワップはUSDCHF、GBPAUDショートの組み合わせが高いのでこの四ペアにします。
同じ通貨を重複させない事ですべてが同時に下がるといった確率を下げています。
NZDJPY 36,134
EURCADs84,878
USDCHF 77,656
GBPAUDs78,826
年間合計 277,494円 + 利確分
2005年から月足で過去データーを分析したところ
最大マイナスは2009年1月のー7.9%
翌月、翌々月とも+5%をだして回復しているので問題はなさそうです。
4通貨ペアすべてマイナス月は7回/160=4%
最終は2015年8月です。
つづく
※最近長文が多いのは人と話していないかもしれません。
だれか飲みにいきませんか~
Vシステム(フルレバ?)が好きな私ですが、最近はかなりの余剰が残っています。
基本的に物価が上がっていく以上フィアット(法定通貨)の価値は下がっていきます。
今100万円で買えるものは、10年後に100万円では買えないという事です。
そこで余剰証拠金でスワップをのんびり稼ぎたいと思います。
そんな時に素敵なサイトを見つけました。
OANDAさんです。https://www.oanda.jp/lab-education/simulator/
スワップの自動計算器です。
例えばUSD/JPYの100万円、25倍、1年を選択し「計算を開始する」をクリックしますね。
色々と情報が出てきます。
取引数量 227,000
1日のスワップ 1,407円
一年後時点 513,701円
今回は10,000通貨ペアの毎月購入を考えてみます。
取引数量227,000 ÷ 10,000 = 22.7
1日のスワップ 1,407 ÷ 22.7 = 61.98
一年後時点 513,701 ÷ 22.7 = 22,630
1万通貨ペアに必要な証拠金は 109.6 × 10,000ペア ÷ 25(レバ)= 43,840円
証拠金は125円まで上がれば50,000円になります。
また、10,000USDJPYは10円下がると10万円下がります。
10万円 + 5万円 = 15万円 がスタート金額です。
また折角ですので1円上がったら利確・リオーダーします。
毎月一回コツコツと購入する事にします。
また、このシステムはなぜかショートの計算が出来ません。
ショートはMT4から買いスワップ、売りスワップを計算して算出します。
高金利通貨 AUD,NZD、CAD,USD
低金利もしくはマイナスのJPY,EUR,CHF,GBPこの組み合わせをします。
この中から4つのペアを組み合わせます。
通貨ペアの年間スワップです。
空欄はOANDA TY3で取り扱いの無いペア
NZDはJPYしかありませんのでNZDJPYは決定です。
CADはEURとJPYのぺアがありますがJPYは使いましたのでEURCADショートです。
残りは二通り組み合わせがありますが合計スワップはUSDCHF、GBPAUDショートの組み合わせが高いのでこの四ペアにします。
同じ通貨を重複させない事ですべてが同時に下がるといった確率を下げています。
NZDJPY 36,134
EURCADs84,878
USDCHF 77,656
GBPAUDs78,826
年間合計 277,494円 + 利確分
2005年から月足で過去データーを分析したところ
最大マイナスは2009年1月のー7.9%
翌月、翌々月とも+5%をだして回復しているので問題はなさそうです。
4通貨ペアすべてマイナス月は7回/160=4%
最終は2015年8月です。
つづく
※最近長文が多いのは人と話していないかもしれません。
だれか飲みにいきませんか~
2018年5月23日水曜日
EA SMOOTHの比較テスト
EA SMOOTH(仮称)の比較テストです。
左がリアル口座 右はBACKTESTの結果です。
14回中11回は同じ分に動作しています。
①5/15 15:30にアメリカ小売売上高の発表がありました。
ここでフォワードはbuy-sell-buyとエントリーをしていますが、バックテストはbuy-buy-buyです。時間にもズレがあります。指標発表の時の激しい動きはバックテスト(3-5-3)では再現できないといったところでしょうか。
②5/21 03:54:49のbuyがバックテストでは欠けています。
中値ですね。ここも激しく動きましたので再現が出来ていないようですね。
左がリアル口座 右はBACKTESTの結果です。
14回中11回は同じ分に動作しています。
①5/15 15:30にアメリカ小売売上高の発表がありました。
ここでフォワードはbuy-sell-buyとエントリーをしていますが、バックテストはbuy-buy-buyです。時間にもズレがあります。指標発表の時の激しい動きはバックテスト(3-5-3)では再現できないといったところでしょうか。
②5/21 03:54:49のbuyがバックテストでは欠けています。
中値ですね。ここも激しく動きましたので再現が出来ていないようですね。
価格のずれは以下の通りです。
±0x1
±20x2
±30x3
-60x1
-110x1指標発表
+430x1指標発表
トータルでは100の差異があります。
平均すると一回当たり10未満ですね。なかなか優秀です。
高速、安定型を目指したのですが利益が少ないのがネックですね。
2018年5月20日日曜日
マルチ通貨 EAの作り方
今日はマルチ通貨対応のEAを開発してみます。
通常は通貨ペア指定をSymbol()にしてチャートの通貨ペアを使用します。
””やNULLも同じ意味です。
このシンボルを USDJPY の様に指定するとチャートの通貨ペア以外を選ぶことが出来ます。業者によっては _USDJPY や USDJPY.oj5k の様になっていることもありますので、気配値表示を参照にして下さい。※重要
簡単なEAを作ります。
void OnTick(){
if(iRSI(Symbol(),PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
int RV=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Ask-0.1,Ask+0.1);
}
}
EA適応したチャート Symbol() のRSIが30を下回り、かつポジションを持っていない時にEA適応したチャートの通貨で買い発注します。
USDJPYとEURUSDをそれぞれ一つのEAで発注する時はこんな感じになります。
初めにUSDJPYのRSIを判定し条件が合えばUSDJPYの発注をします。
初めにEURUSDのRSIを判定し条件が合えばEURUSDの発注をします。
void OnTick(){
if(iRSI("USDJPY",PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
int RV=OrderSend("USDJPY",OP_BUY,0.1,Ask,5,Ask-0.1,Ask+0.1);
}
if(iRSI("EURUSD",PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
RV=OrderSend("EURUSD",OP_BUY,0.1,Ask,5,Ask-0.001,Ask+0.001);
}
}
TakeProfitとStopLossも桁が変わるので変更しています。
※OnTick()はチャートのティック(価格)が変動した時に動作します。
上のソースをUSDJPYに適応した時にはUSDJPYの価格が動いた時に動作するのでEURUSDはタイミングが合わないかもしれません。
これを回避するにはOnTimer()を使用します。
int OnInit()
{
EventSetMillisecondTimer(30);
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
EventKillTimer();
}
void OnTimer(){
if(iRSI("USDJPY",PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
int RV=OrderSend("USDJPY",OP_BUY,0.1,Ask,5,Ask-0.1,Ask+0.1);
}
if(iRSI("EURUSD",PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
RV=OrderSend("EURUSD",OP_BUY,0.1,Ask,5,Ask-0.001,Ask+0.001);
}
}
通常は通貨ペア指定をSymbol()にしてチャートの通貨ペアを使用します。
””やNULLも同じ意味です。
このシンボルを USDJPY の様に指定するとチャートの通貨ペア以外を選ぶことが出来ます。業者によっては _USDJPY や USDJPY.oj5k の様になっていることもありますので、気配値表示を参照にして下さい。※重要
簡単なEAを作ります。
void OnTick(){
if(iRSI(Symbol(),PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
int RV=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Ask-0.1,Ask+0.1);
}
}
EA適応したチャート Symbol() のRSIが30を下回り、かつポジションを持っていない時にEA適応したチャートの通貨で買い発注します。
USDJPYとEURUSDをそれぞれ一つのEAで発注する時はこんな感じになります。
初めにUSDJPYのRSIを判定し条件が合えばUSDJPYの発注をします。
初めにEURUSDのRSIを判定し条件が合えばEURUSDの発注をします。
void OnTick(){
if(iRSI("USDJPY",PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
int RV=OrderSend("USDJPY",OP_BUY,0.1,Ask,5,Ask-0.1,Ask+0.1);
}
if(iRSI("EURUSD",PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
RV=OrderSend("EURUSD",OP_BUY,0.1,Ask,5,Ask-0.001,Ask+0.001);
}
}
TakeProfitとStopLossも桁が変わるので変更しています。
※OnTick()はチャートのティック(価格)が変動した時に動作します。
上のソースをUSDJPYに適応した時にはUSDJPYの価格が動いた時に動作するのでEURUSDはタイミングが合わないかもしれません。
これを回避するにはOnTimer()を使用します。
int OnInit()
{
EventSetMillisecondTimer(30);
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
EventKillTimer();
}
void OnTimer(){
if(iRSI("USDJPY",PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
int RV=OrderSend("USDJPY",OP_BUY,0.1,Ask,5,Ask-0.1,Ask+0.1);
}
if(iRSI("EURUSD",PERIOD_CURRENT,14,PRICE_CLOSE,0)<30
&&!OrdersTotal())
{
RV=OrderSend("EURUSD",OP_BUY,0.1,Ask,5,Ask-0.001,Ask+0.001);
}
}
OnInit()内にEventSetMillisecondTimer(30);を指定します。
30msごとにOnTimer()を動作させると設定します。
void OnDeinit(const int reason)
{
EventKillTimer();
}
こちらは終了処理です。必ず入れて下さい。
OnTick()をOnTimer()に変更します。
これで価格が動く、動かないにかかわらず30ms毎に動作します。
※OnTimer()はバックテストでは動作しません。
また、複数通貨ペアのEAをOnTick()でバックテストした時に選択した通貨ペア以外は発注されません。通貨ペア毎にバックテストをしてエクセルか何かで合成してください。
{
EventKillTimer();
}
こちらは終了処理です。必ず入れて下さい。
OnTick()をOnTimer()に変更します。
これで価格が動く、動かないにかかわらず30ms毎に動作します。
※OnTimer()はバックテストでは動作しません。
また、複数通貨ペアのEAをOnTick()でバックテストした時に選択した通貨ペア以外は発注されません。通貨ペア毎にバックテストをしてエクセルか何かで合成してください。
2018年5月14日月曜日
Smooth君 取引一回目
EAを開発してフォワードテストの期間は大変長く感じるものです。
前回のSmooth君 金曜午後にフォワードを開始一回目の取引がありました。
スクショ貼り付けましたが小さいですね・・・
上はフォワードテスト(OANDA TY3 5k 0.1Lot)
09:43:44 BUY 109.307
09:46:01 Close 109.320 130円の利益
下はバックテスト 0.1Lot
09:43 BUY 109.307
09:46 Close 109.318 110円の利益です。
美味しいほうに少しずれていますが、バックテストに似た取引が出来そうです。
しばらくは観察期間ですね
前回のSmooth君 金曜午後にフォワードを開始一回目の取引がありました。
スクショ貼り付けましたが小さいですね・・・
上はフォワードテスト(OANDA TY3 5k 0.1Lot)
09:43:44 BUY 109.307
09:46:01 Close 109.320 130円の利益
下はバックテスト 0.1Lot
09:43 BUY 109.307
09:46 Close 109.318 110円の利益です。
美味しいほうに少しずれていますが、バックテストに似た取引が出来そうです。
しばらくは観察期間ですね
2018年5月10日木曜日
また危険なEAを作ってしまいました・・・
HMAを使用して少し開発をしてみました。
まずは固定ロットで開発し連勝、連敗の具合を見てロットコントロールを加えるのがTACA流の開発です。
1,000,000円開始 期間は3年3カ月 純益1141万円
2005年からスタートさせてVシステムを搭載すれば10億もしくは100億越えかもしれませんね。
もう少し改良してフォワードしてみようと思います。
ちなみにこちらはスプレッド3ですがスプレッド6ですと純益は半分になります。
O社TY3、T社1,000通貨など面白いかもしれませんね。
発売する時は証券会社としっかりネゴしてからですね♪
まずは固定ロットで開発し連勝、連敗の具合を見てロットコントロールを加えるのがTACA流の開発です。
1,000,000円開始 期間は3年3カ月 純益1141万円
2005年からスタートさせてVシステムを搭載すれば10億もしくは100億越えかもしれませんね。
もう少し改良してフォワードしてみようと思います。
ちなみにこちらはスプレッド3ですがスプレッド6ですと純益は半分になります。
O社TY3、T社1,000通貨など面白いかもしれませんね。
発売する時は証券会社としっかりネゴしてからですね♪
HMAの計算方法
HULL Moving Average 略してHMAは非常に現在のプライスに近くなめらかと評判の平均です。
今は無きゴゴジャンの中井さんが退社直前に教えてくれたのですが、使ってみると評判通りでした。リペイントする物でもこれだけのものはなかなかありません。
インジケーターとしては何度か開発をしたことがあるのですが、
EAに組み込むために関数を作成してみます。
計算式はまずpHMA(期間)=LWMA(期間/2)*2-LWMA(期間)を作成します。
このpHMAのLWMA(期間の平方根)がHMAになります。
iMAに追加できればいいのですが今回はiHMAとして作成します。
iMAは下記のようになっています。
※公式サイトは違う記述になっていますがこちらが今のMetaEditorに会っているかと思います。
double iMA(
const string symbol
,ENUM_TIMEFRAMES timeframe
,int ma_period
,int ma_shift
,ENUM_MA_METHOD ma_method
,ENUM_APPLIED_PRICE applied_price
,int shift=0)
これに準じた形にします。
double iHMA(
const string symbol=NULL
,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT
,int period=13
,int ma_shift=0
,ENUM_MA_METHOD ma_method=MODE_LWMA
,ENUM_APPLIED_PRICE applied_price=PRICE_MEDIAN
,int shift=0)
全てにデフォルトで値を入れていますのでiHMA()だけでも期間13のLWMA使用MEDIANのシフト0で値を出します。
pHMA[]を宣言しArrayResizeで要素数を決めます。
宣言時は[]もしくは数値しか指定できませんのでこのようにしています。
あとは先ほどの計算式に則りreturnで数値を戻します。
double iHMA(const string symbol=NULL
,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT
,int period=13
,int ma_shift=0
,ENUM_MA_METHOD ma_method=MODE_LWMA
,ENUM_APPLIED_PRICE applied_price=PRICE_MEDIAN
,int shift=0)
{
double pHMA[];
ArrayResize(pHMA,period+2);
for(i=period+1;i>=0;i--)
{
pHMA[i]=iMA(symbol,timeframe,(period/2),ma_shift,ma_method,applied_price,shift)*2 - iMA(symbol,timeframe,period ,ma_shift,ma_method,applied_price,shift);
}
return (iMAOnArray(pHMA,0,(int)MathSqrt(period),ma_shift,ma_method,shift));
}
この関数の特徴
■引数がiMAと同様
■初期値がすべて入っている為省略が可能
■HMAはLWMAを使用するがSMA,EMA、SMMAも使用する事が出来る。
■価格を選択できる
さて、これを使ってなにか開発しましょうかw
今は無きゴゴジャンの中井さんが退社直前に教えてくれたのですが、使ってみると評判通りでした。リペイントする物でもこれだけのものはなかなかありません。
インジケーターとしては何度か開発をしたことがあるのですが、
EAに組み込むために関数を作成してみます。
計算式はまずpHMA(期間)=LWMA(期間/2)*2-LWMA(期間)を作成します。
このpHMAのLWMA(期間の平方根)がHMAになります。
iMAに追加できればいいのですが今回はiHMAとして作成します。
iMAは下記のようになっています。
※公式サイトは違う記述になっていますがこちらが今のMetaEditorに会っているかと思います。
double iMA(
const string symbol
,ENUM_TIMEFRAMES timeframe
,int ma_period
,int ma_shift
,ENUM_MA_METHOD ma_method
,ENUM_APPLIED_PRICE applied_price
,int shift=0)
これに準じた形にします。
double iHMA(
const string symbol=NULL
,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT
,int period=13
,int ma_shift=0
,ENUM_MA_METHOD ma_method=MODE_LWMA
,ENUM_APPLIED_PRICE applied_price=PRICE_MEDIAN
,int shift=0)
全てにデフォルトで値を入れていますのでiHMA()だけでも期間13のLWMA使用MEDIANのシフト0で値を出します。
pHMA[]を宣言しArrayResizeで要素数を決めます。
宣言時は[]もしくは数値しか指定できませんのでこのようにしています。
あとは先ほどの計算式に則りreturnで数値を戻します。
double iHMA(const string symbol=NULL
,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT
,int period=13
,int ma_shift=0
,ENUM_MA_METHOD ma_method=MODE_LWMA
,ENUM_APPLIED_PRICE applied_price=PRICE_MEDIAN
,int shift=0)
{
double pHMA[];
ArrayResize(pHMA,period+2);
for(i=period+1;i>=0;i--)
{
pHMA[i]=iMA(symbol,timeframe,(period/2),ma_shift,ma_method,applied_price,shift)*2 - iMA(symbol,timeframe,period ,ma_shift,ma_method,applied_price,shift);
}
return (iMAOnArray(pHMA,0,(int)MathSqrt(period),ma_shift,ma_method,shift));
}
■引数がiMAと同様
■初期値がすべて入っている為省略が可能
■HMAはLWMAを使用するがSMA,EMA、SMMAも使用する事が出来る。
■価格を選択できる
さて、これを使ってなにか開発しましょうかw
2018年5月8日火曜日
番外編 ルーレット戦略@ノルウェイジャンジュエル
ルーレットについて非常に関心のある方が多かったようなので少し書いてみます。
少し趣旨と離れますがわたしのEA開発の原点がここにあります。
今回は先日乗ったノルウェイジャンジュエルのカジノをベースに書きます。
ルーレットにも何種類かあります。
並び方は大きく四つ緑0が一つのヨーロッパスタイル、マカオスタイル(最近はマカオでも少なくなってきました。)0と00のあるアメリカンスタイル(韓国もこれです)
そしてメキシカンスタイル0と00と000があります。
0は赤でも黒でもないのでアウトサイド(赤黒、偶数奇数、大小、3倍)に賭けた時は無慈悲にもはずれとなります。
0が一つの時は1÷37=2.70%の控除率です。
0,00の時は2÷38=5.26%
10回連続でゲームをするとシングル0の時の資金は76%に
ダブルゼロ0,00の時には58.2%になります。
出来るだけシングル0のところ(マカオ、ヨーロッパ)でやりたいものです。
この控除分がカジノの儲けに見えますが、実際はこれだけではありません。
ディーラーは好きなところに球を落とすことが出来ます。
多少ずれる事はありますが...
ノルウェイジャンジュエルではMIN2$の最低5枚以上からかけることが出来ます。
MAXは200$です。マーチンゲールをすると4連敗で上限に達します。
そこで、船室で考えた戦略が変則モンテカルロです。
通常モンテカルロは4枚からスタートしますが最低五枚です。
はじめは3倍に5枚ベットします WIN終了+10 LOSE 6枚ベット
二回目 WIN終了+7 LOSE7枚ベット
三回目 WIN終了+3
確立では31.5%の確率でWINとなりますので勝てるはずですが3連続負ける時もあります。
以降+1枚ずつ増やしていきます。
四、五、六回目は2回勝利で終了
七、八、九回目は3回勝利で終了とします。
これでほぼほぼ勝てます。
賭けるところはたて列2 to 1です。
ココの面白いところは真ん中は黒が多く、右は赤が多い事です。
今回は赤のトレンドが発生していたので右列に賭けます。
この時ベットする時は常に同じ場所にします。
動かさないといつか当たるという点とディーラーとの心理戦です。
ロットをコントロールしながらゲームを進めるとディーラーは目を付けてきます。
当たった時にチップを返すときに枚数を間違え始めた時にディーラーはこう考えます。
「こいつめんどくせーな早く退治しよう」
ここでテーブルを見てみます。
0から左に2,14,35,23と並んでいます。
これはすべて真ん中の列です。
ちなみに33,21,6,18と36,24,3,15この二つは右の列です。
右の列に賭け続けると16~28をディーラーは狙い始めます。
多少ずれても3の倍数(右列)が出ないからです。
実際このあと14が二連続で出ました。
二回目にはfourteen again!と自慢げにディーラーがいいます。
もうここは チャンスですね。
ディーラーが球を投げる時どっち回転で0がどこの位置で投げるかを常に観察します。
これで14に落ちた時と同じ位置で投げた場合ほぼ狙ってきます。
ディーラーが投げた後に0,2,14,28にドガンとベットしたところ球が落ちる前にディーラーがあぶら汗を流していました。さっきまで右列しかベットしていなかったのにいきなりなぜ!といったところでしょうか
そして2におちます!
この後はディーラーが構えるので別のテーブルに移動します。
Hit& Awayです。
まとめると
①ベットコントロールで凌ぎながら同じところに賭け続けます。
②心理的にディーラーの落とすところを導きます。
③ディーラーがどの位置で投げるかを常に観察します。
④勝ったらそそくさと逃げましょう~♪
さて4回程勝負に行きましたが、無敗です!
TACA的ストラテジーいかがでしょうか~
少し趣旨と離れますがわたしのEA開発の原点がここにあります。
今回は先日乗ったノルウェイジャンジュエルのカジノをベースに書きます。
ルーレットにも何種類かあります。
並び方は大きく四つ緑0が一つのヨーロッパスタイル、マカオスタイル(最近はマカオでも少なくなってきました。)0と00のあるアメリカンスタイル(韓国もこれです)
そしてメキシカンスタイル0と00と000があります。
0は赤でも黒でもないのでアウトサイド(赤黒、偶数奇数、大小、3倍)に賭けた時は無慈悲にもはずれとなります。
0が一つの時は1÷37=2.70%の控除率です。
0,00の時は2÷38=5.26%
10回連続でゲームをするとシングル0の時の資金は76%に
ダブルゼロ0,00の時には58.2%になります。
出来るだけシングル0のところ(マカオ、ヨーロッパ)でやりたいものです。
この控除分がカジノの儲けに見えますが、実際はこれだけではありません。
ディーラーは好きなところに球を落とすことが出来ます。
多少ずれる事はありますが...
ノルウェイジャンジュエルではMIN2$の最低5枚以上からかけることが出来ます。
MAXは200$です。マーチンゲールをすると4連敗で上限に達します。
そこで、船室で考えた戦略が変則モンテカルロです。
通常モンテカルロは4枚からスタートしますが最低五枚です。
はじめは3倍に5枚ベットします WIN終了+10 LOSE 6枚ベット
二回目 WIN終了+7 LOSE7枚ベット
三回目 WIN終了+3
確立では31.5%の確率でWINとなりますので勝てるはずですが3連続負ける時もあります。
以降+1枚ずつ増やしていきます。
四、五、六回目は2回勝利で終了
七、八、九回目は3回勝利で終了とします。
これでほぼほぼ勝てます。
賭けるところはたて列2 to 1です。
ココの面白いところは真ん中は黒が多く、右は赤が多い事です。
今回は赤のトレンドが発生していたので右列に賭けます。
この時ベットする時は常に同じ場所にします。
動かさないといつか当たるという点とディーラーとの心理戦です。
ロットをコントロールしながらゲームを進めるとディーラーは目を付けてきます。
当たった時にチップを返すときに枚数を間違え始めた時にディーラーはこう考えます。
「こいつめんどくせーな早く退治しよう」
ここでテーブルを見てみます。
0から左に2,14,35,23と並んでいます。
これはすべて真ん中の列です。
ちなみに33,21,6,18と36,24,3,15この二つは右の列です。
右の列に賭け続けると16~28をディーラーは狙い始めます。
多少ずれても3の倍数(右列)が出ないからです。
実際このあと14が二連続で出ました。
二回目にはfourteen again!と自慢げにディーラーがいいます。
もうここは チャンスですね。
ディーラーが球を投げる時どっち回転で0がどこの位置で投げるかを常に観察します。
これで14に落ちた時と同じ位置で投げた場合ほぼ狙ってきます。
ディーラーが投げた後に0,2,14,28にドガンとベットしたところ球が落ちる前にディーラーがあぶら汗を流していました。さっきまで右列しかベットしていなかったのにいきなりなぜ!といったところでしょうか
そして2におちます!
この後はディーラーが構えるので別のテーブルに移動します。
Hit& Awayです。
まとめると
①ベットコントロールで凌ぎながら同じところに賭け続けます。
②心理的にディーラーの落とすところを導きます。
③ディーラーがどの位置で投げるかを常に観察します。
④勝ったらそそくさと逃げましょう~♪
さて4回程勝負に行きましたが、無敗です!
TACA的ストラテジーいかがでしょうか~
2018年5月6日日曜日
帰国とくまのみさんのソース解説
さーて、わたし的に第三期と呼んでいるEA開発ライフです。
第一期はGSKを退職しのんびりとAMSERなど開発していた時です。
第二期はゴゴジャンで出品者サポートに回っていた時期です。
サポートと言っても色々教えていただく毎日でしたが
そしてゴゴジャンを退職して第三期が今です。
退職しマカオへ半週間、そしてマレーシアのゲンティン(カジノ)のクルーズ船に一週間のってきました。
この時の体重が80.5kg デブになってしまいました。
そして朝はささみ、昼はささみ、よるもささみで毎日ジムへ通い始めます。
何と28日で10.5kg痩せました!!70kgです。
会う人みんながすごいBUTリバウンド怖いよ~的な事をいいます。
そしてGWにノルウェイジャンジュエルというクルーズ船に乗ってきました。
ルーレットを4日ほどしましたが無敗です!!
ベットコントロールと心理戦、ヒットアンドウェイ(勝ち逃げw)そして投げるスピードと落下地点の推測をすればルーレットでは負ける気がしません。
そして体重が...7日で75kgです。
プチリバウンドw
ある程度船でもジムに通ったのですがやはりインプットが多いといくら運動(アウトプット)をしてもダメなようです。
さて、クルーズが始まり高知に着いた頃にくまのみさんからシンボルについて質問を頂きました。携帯で返信をしていたためあまり上手く伝えられなかったかもしれません。
簡単な解説を書いてみたいと思います。
以下頂いたソース
string TUUKA; ←TUUKAを文字列として使用する宣言
extern string TA_1 = "EURUSD"; ←TA_1を文字列として使用する宣言初期値はEURUSD externが付いている物は設定で変更できます。
extern string TA_2 = "GBPUSD"; 上と同じ TA_2の初期値はGBPUSD
extern string TA_3 = "USDCHF";
extern string TA_4 = "EURCAD";
extern string TA_5 = "USDCAD";
extern string TA_6 = "AUDCAD";
extern string TA_7 = "AUDNZD";
extern string TA_8 = "EURUSD";
TUUKA = TA_1; TUUKAにTA_1の値を入れます。TUUKAはGBPUSDです。
TUUKA = TA_2; TUUKAにTA_2の値を入れます。TUUKAはUSDCHFです。
TUUKA = TA_3;
TUUKA = TA_4;
TUUKA = TA_5;
TUUKA = TA_6;
TUUKA = TA_7;
TUUKA = TA_8; TUUKAにTA_8の値を入れます。TUUKAはEURUSDです。
TUUKA = Symbol() ; TUUKAにSymbol()をいれます。TUUKAは現在のチャートの通貨ペアです。
int start() {
if (StringSubstr(Symbol(), 0, 6) != TUUKA || Period() != PERIOD_M30) return (1);
int start(){ }この中身はティックが動くたびに動作します。
StringSubstr(Symbol(), 0, 6) StringSubstrは文字列の中から文字を取り出します。
この場合Symbol()の0文字目から6文字とりだします。
第一期はGSKを退職しのんびりとAMSERなど開発していた時です。
第二期はゴゴジャンで出品者サポートに回っていた時期です。
サポートと言っても色々教えていただく毎日でしたが
そしてゴゴジャンを退職して第三期が今です。
退職しマカオへ半週間、そしてマレーシアのゲンティン(カジノ)のクルーズ船に一週間のってきました。
この時の体重が80.5kg デブになってしまいました。
そして朝はささみ、昼はささみ、よるもささみで毎日ジムへ通い始めます。
何と28日で10.5kg痩せました!!70kgです。
会う人みんながすごいBUTリバウンド怖いよ~的な事をいいます。
そしてGWにノルウェイジャンジュエルというクルーズ船に乗ってきました。
ルーレットを4日ほどしましたが無敗です!!
ベットコントロールと心理戦、ヒットアンドウェイ(勝ち逃げw)そして投げるスピードと落下地点の推測をすればルーレットでは負ける気がしません。
そして体重が...7日で75kgです。
プチリバウンドw
ある程度船でもジムに通ったのですがやはりインプットが多いといくら運動(アウトプット)をしてもダメなようです。
さて、クルーズが始まり高知に着いた頃にくまのみさんからシンボルについて質問を頂きました。携帯で返信をしていたためあまり上手く伝えられなかったかもしれません。
簡単な解説を書いてみたいと思います。
以下頂いたソース
string TUUKA; ←TUUKAを文字列として使用する宣言
extern string TA_1 = "EURUSD"; ←TA_1を文字列として使用する宣言初期値はEURUSD externが付いている物は設定で変更できます。
extern string TA_2 = "GBPUSD"; 上と同じ TA_2の初期値はGBPUSD
extern string TA_3 = "USDCHF";
extern string TA_4 = "EURCAD";
extern string TA_5 = "USDCAD";
extern string TA_6 = "AUDCAD";
extern string TA_7 = "AUDNZD";
extern string TA_8 = "EURUSD";
TUUKA = TA_1; TUUKAにTA_1の値を入れます。TUUKAはGBPUSDです。
TUUKA = TA_2; TUUKAにTA_2の値を入れます。TUUKAはUSDCHFです。
TUUKA = TA_3;
TUUKA = TA_4;
TUUKA = TA_5;
TUUKA = TA_6;
TUUKA = TA_7;
TUUKA = TA_8; TUUKAにTA_8の値を入れます。TUUKAはEURUSDです。
TUUKA = Symbol() ; TUUKAにSymbol()をいれます。TUUKAは現在のチャートの通貨ペアです。
int start() {
if (StringSubstr(Symbol(), 0, 6) != TUUKA || Period() != PERIOD_M30) return (1);
int start(){ }この中身はティックが動くたびに動作します。
StringSubstr(Symbol(), 0, 6) StringSubstrは文字列の中から文字を取り出します。
この場合Symbol()の0文字目から6文字とりだします。
チャートの通貨ペアがUSDJPYの場合U~YまでとりだしますのでUSDJPYとなります。
通貨ペアにおまけがついていることがあります。
例えばUSDJPY-a01 この場合は0文字目のU~6文字YまでとりますのでUSDJPYとなり-a01が無くなります。
!=は等しくない場合 ちなみに==は等しい場合です。
||はorです。
USDJPYのチャートで通貨ペア表示が6文字の場合
StringSubstr(Symbol(), 0, 6)はUSDJPY
TUUKA 今はSymbol()はUSDJPY となります。
同じです。
最後のreturn(1)はティックルーチンから出る命令ですので、StringSubstr(Symbol(), 0, 6)とTUUKAが異なる場合はこの続きの発注やらなんやらが動かなくなります。
今回の場合は同じですので動きます。
チャートの名前におまけがついている場合 例えばUSDJPY-a01
StringSubstr(Symbol(), 0, 6)はUSDJPY
TUUKA 今はSymbol()はUSDJPY-a01 となります。
USDJPYとUSDJPY-a01は異なりますので動作しなくなります。
通貨ペアの縛りを無くすには
if (StringSubstr(Symbol(), 0, 6) != TUUKA || Period() != PERIOD_M30) return (1);
を
if (Period() != PERIOD_M30) return (1);
にします。
タイムフレームの縛りを無くす場合は
if ( Period() != PERIOD_M30) return (1);
両方無くす場合は
if (StringSubstr(Symbol(), 0, 6) != TUUKA || Period() != PERIOD_M30) return (1);
すべて消しましょう。
う~ん長文失礼します!
登録:
投稿 (Atom)