日別アーカイブ: 2015年1月16日

FX デモ口座運用実績(2014/12/16~2015/1/15)

Windows VPS サーバー上での FX デモ口座(FXCM)の運用が1ヶ月になったので、実績をまとめてみました。

(2014/12/16~2015/1/15)

日付、時刻、売買の種類、ロット、通貨ペア、約定価格、日付、時刻、決済価格、損益 の順番です。

最後の損益の金額は円です。

2014-12-16	02:00:01	buy	0.1	usdchf	0.96558	2014-12-16	10:32:12	0.96251	-3726
2014-12-16	05:26:11	buy	1	eurusd	1.2453	2014-12-16	07:06:58	1.24542	1409
2014-12-16	07:40:32	sell	1	usdjpy	117.31	2014-12-16	10:29:11	117	31000
2014-12-16	12:27:59	sell	1	gbpusd	1.5692	2014-12-16	13:42:52	1.57421	-58164
2014-12-16	14:45:00	sell	1	gbpusd	1.57407	2014-12-17	04:38:39	1.57336	8279
2014-12-29	18:10:00	buy	1	usdjpy	120.634	2014-12-30	07:40:04	120.429	-20500
2014-12-30	07:40:04	sell	1	usdjpy	120.429	2014-12-31	04:24:42	119.326	110300
2014-12-30	11:47:37	sell	1	usdjpy	119.535	2014-12-30	21:00:00	119.532	300
2015-01-02	05:44:58	buy	1	usdjpy	120.362	2015-01-02	17:00:00	120.626	26400
2015-01-02	23:00:00	buy	1	usdjpy	120.477	2015-01-05	05:39:40	120.478	100
2015-01-05	19:50:00	sell	1	usdjpy	119.588	2015-01-05	20:33:19	119.789	-20100
2015-01-05	21:10:00	sell	1	usdjpy	119.579	2015-01-06	01:00:07	119.327	25200
2015-01-06	02:45:00	sell	1	usdjpy	119.351	2015-01-06	02:53:11	119.351	0
2015-01-06	04:25:00	sell	1	usdjpy	119.296	2015-01-06	07:32:18	119.127	16900
2015-01-06	10:45:00	sell	1	usdjpy	118.937	2015-01-06	12:37:31	118.899	3800
2015-01-07	00:00:04	sell	0.3	eurusd	1.18861	2015-01-07	13:34:48	1.18291	20373
2015-01-07	06:10:00	buy	1	usdjpy	119.064	2015-01-07	07:42:32	118.914	-15000
2015-01-07	08:30:01	buy	1	usdjpy	119.024	2015-01-07	11:19:45	118.877	-14700
2015-01-07	13:34:48	sell	0.3	eurusd	1.18287	2015-01-08	12:04:31	1.17717	20481
2015-01-07	17:00:00	buy	1.1	usdjpy	119.517	2015-01-07	21:50:49	118.857	-72600
2015-01-08	03:32:28	buy	1.1	usdjpy	119.547	2015-01-08	05:29:29	119.735	20680
2015-01-08	08:57:41	buy	1.1	usdjpy	119.858	2015-01-08	09:31:20	119.914	6160
2015-01-08	09:29:54	buy	1.1	usdjpy	119.937	2015-01-08	14:00:00	119.812	-13750
2015-01-08	12:04:32	sell	0.3	eurusd	1.17716	2015-01-09	15:25:42	1.18222	-18080
2015-01-09	03:00:00	buy	1.1	usdjpy	119.82	2015-01-09	03:12:49	119.598	-24420
2015-01-09	17:00:00	sell	0.3	eurusd	1.17836	2015-01-12	16:34:52	1.18131	-10510
2015-01-12	08:00:02	buy	1	audusd	0.82527	2015-01-14	08:00:00	0.8093	-187028
2015-01-12	14:27:49	sell	1	eurusd	1.17938	2015-01-12	20:00:00	1.18258	-36142
2015-01-13	10:00:00	buy	0.3	eurusd	1.18505	2015-01-15	11:33:47	1.16898	-56541
2015-01-13	11:45:43	sell	1	eurusd	1.17979	2015-01-14	00:07:03	1.17736	28644
2015-01-13	16:00:00	sell	1	eurusd	1.177	2015-01-16	05:01:00	1.16319	160298
2015-01-13	16:00:00	buy	1	usdchf	1.02035	2015-01-15	07:48:38	1.02047	1385
2015-01-13	20:30:00	sell	1	usdjpy	117.819	2015-01-14	20:00:00	117.04	77900
2015-01-14	13:03:07	sell	1	eurusd	1.17545	2015-01-14	15:30:04	1.17903	-41751
2015-01-15	20:35:14	buy	1.1	usdchf	0.8808	2015-01-16	05:07:06	0.86037	-303152
2015-01-15	02:30:00	buy	1	usdjpy	117.545	2015-01-15	11:30:00	117.537	-800
2015-01-15	03:03:36	buy	1.1	audusd	0.82088	2015-01-16	05:06:43	0.82425	43067
2015-01-15	04:00:02	sell	1	eurusd	1.17745	2015-01-16	01:00:00	1.16289	169206
2015-01-15	08:00:05	buy	1.1	gbpusd	1.52297	2015-01-15	20:00:00	1.5153	-98468
2015-01-15	12:00:01	sell	0.3	eurusd	1.17164	2015-01-15	16:15:42	1.16594	20033
2015-01-15	13:30:00	sell	1	usdjpy	116.459	2015-01-16	06:34:58	116.414	4500


損益は通算して、マイナス 198117円
となりました。

本日のドルフランの暴落の -303152円がなければプラス 105035円だったのに・・・シクシク。

2015-01-12 の -187028円の負けは買ったとたんに相場が反転しました。これに対する対策(急落対策ではない)はすでに昨日織り込んであります。

*

稼働しているプログラムは自作が3種類、他作が2種類(kolachi, Nikkori)です。

自作の分は毎週順調に進化していますので、勝率とプロフィットファクターは初期のものよりパワーアップしています。

他作の Nikkori はドローダウンを減らすいいアイディアを考えたので、似たようなシステムを自作することを考えています。

2月からリアル口座に入金して小額から運用していこうかと思っています。

###

FX 大ダメージ 暴落対策用コードの導入

 

自動売買のデモ口座が今朝とんでもないことに。

昨日は調子よく、30万円プラス近くまで行ったのですが、今朝プラスマイナスゼロくらいに戻っていたのです。

利益確定をもう少し改善しなくてはと思ってよく見ると、ドルフランの暴落によるものと判明(上のグラフ)。

スイス中銀がスイスフラン相場について1ユーロ=1.20フランの上限を撤廃したとのニュースのためでしょう。

この上限はFXサーファーにはなじみのものですが、ついにスイスの為替介入がなくなる日が来たのですね。

ドルフランの暴落と書きましたが、ドルは無実で、スイスフラン単独の高騰ですね。

しかし、数時間で 15%も高騰したとは・・・ケタ違いです。

*

しかし、デモ口座でよかった。

あわててプログラムに暴落対策を加えました。

ちゃんと動くかはチェックしていません。バックテストではちょっと効果があるようなんですが。

もう一度暴落が起きないかな。

プログラムソース

//
// yasciiMACD_3cross07.mq4
//                Trailing stop
//

//マジックナンバーの定義
#define MAGIC  42553        

//パラメーターの設定//
extern double Lots = 1.0;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  ""; //コメント

extern int Fast_EMA_Period1 = 6;
extern int Slow_EMA_Period1 = 19;
extern int Signal_Period1 = 6;
extern int Fast_EMA_Period2 = 12;
extern int Slow_EMA_Period2 = 26;
extern int Signal_Period2 = 9;
extern int Fast_EMA_Period3 = 18 ; // 19;
extern int Slow_EMA_Period3 = 33 ; // 39;
extern int Signal_Period3 = 11; // 9;

extern int ADXcrossesPeriod = 14;
extern int Fast_period = 18 ;
extern double margin = 0.0 ;

extern double ILC = 730.0 ; 

//---- input parameters
extern int       Viscosity=13;
extern int       Sedimentation=50;
extern double    Threshold_level=1.3;
extern bool      lag_supressor=true;

//変数の設定//
int Ticket_L = 0; //買い注文の結果をキャッチする変数
int Ticket_S = 0; //売り注文の結果をキャッチする変数
int Exit_L = 0;   //買いポジションの決済注文の結果をキャッチする変数
int Exit_S = 0;   //売りポジションの決済注文の結果をキャッチする変数
int OS1 ;
int OS2 ;

double   MACD_MAIN1_1 ;
double   MACD_SIGN1_1 ;
double   MACD_Value1_1 ;

double   MACD_MAIN1_2 ;
double   MACD_SIGN1_2 ;
double   MACD_Value1_2 ;

double   MACD_MAIN1_3 ;
double   MACD_SIGN1_3 ;
double   MACD_Value1_3 ;

double   OOPL;
double   OOPS;
double   LwT = 0.0;
double   HgT = 10000.0 ;

//damiani_filter用
double    lag_s_K=0.5;
double   s0 = 0; 
double   s1= 0;
double   s2 = 0;
double   s3 = 0;
double   vol=0;
double t=Threshold_level;

int damiani_f()
{

      double sa=iATR(NULL,0,Viscosity,1);
      double ia = iATR(NULL,0,Sedimentation,1) ;
      if(lag_supressor){
         if (ia == 0) vol = 1.0 ;
         else vol= sa/ia + lag_s_K*(s1-s3);   
      }else{
         if (ia == 0) vol = 1.0 ;
         else vol= sa/ia;   
      }

      double anti_thres=iStdDev(NULL,0,Viscosity,0,MODE_LWMA,PRICE_TYPICAL,1);

      double isd = iStdDev(NULL,0,Sedimentation,0,MODE_LWMA,PRICE_TYPICAL,1) ;
      if (isd == 0) anti_thres = 1.0 ;
      else anti_thres = anti_thres/isd ;

      t=t-anti_thres;

      s3 = s2; s2 = s1; s1= s0; 
      s0 = vol;

      if (vol>t){
      	return(1);
      }else{
      	return(0);
      }

}

int start()
  {

// 暴落対策始まり

   double FastHH1 = Close[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 1)];
   double FastLL1 = Close[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 1)];

   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  

   //買いポジションのエグジット
   if( Bid < FastLL1-margin 
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    

   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET); 

   //売りポジションのエグジット
   if( Ask> FastHH1+margin
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

// 暴落対策終わり

   if (Volume[0]>1 || IsTradeAllowed() == false) return(0) ;

   MACD_MAIN1_1 = iMACD(NULL, 0, Fast_EMA_Period1 , Slow_EMA_Period1, Signal_Period1, PRICE_CLOSE, MODE_MAIN, 1 );
   MACD_SIGN1_1 = iMACD(NULL, 0, Fast_EMA_Period1 , Slow_EMA_Period1, Signal_Period1, PRICE_CLOSE, MODE_SIGNAL, 1 );
   MACD_Value1_1 = MACD_MAIN1_1 - MACD_SIGN1_1 ;

   MACD_MAIN1_2 = iMACD(NULL, 0, Fast_EMA_Period2 , Slow_EMA_Period2, Signal_Period2, PRICE_CLOSE, MODE_MAIN, 1 );
   MACD_SIGN1_2 = iMACD(NULL, 0, Fast_EMA_Period2 , Slow_EMA_Period2, Signal_Period2, PRICE_CLOSE, MODE_SIGNAL, 1 );
   MACD_Value1_2 = MACD_MAIN1_2 - MACD_SIGN1_2 ;

   MACD_MAIN1_3 = iMACD(NULL, 0, Fast_EMA_Period3 , Slow_EMA_Period3, Signal_Period3, PRICE_CLOSE, MODE_MAIN, 1 );
   MACD_SIGN1_3 = iMACD(NULL, 0, Fast_EMA_Period3 , Slow_EMA_Period3, Signal_Period3, PRICE_CLOSE, MODE_SIGNAL, 1 );
   MACD_Value1_3 = MACD_MAIN1_3 - MACD_SIGN1_3 ;

   double FastHH2 = Close[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 2)];
   double FastLL2 = Close[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 2)];

   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   OOPL = OrderOpenPrice();   

   //買いポジションのエグジット
   if(    ((MACD_Value1_1 <0 && MACD_Value1_2 <0) || OOPL - ILC*Point >= Close[1]  || (Close[2] >= FastLL2-margin && Close[1] < FastLL2-margin ))
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    

   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET); 
   OOPS = OrderOpenPrice();

   //売りポジションのエグジット
   if(    ((MACD_Value1_1 >0 && MACD_Value1_2 >0) || OOPS + ILC*Point <= Close[1]  || (Close[2] <= FastHH2+margin && Close[1] > FastHH2+margin ))
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   

   //買いエントリー
   if(    MACD_Value1_1 >0 && MACD_Value1_2 >0 && MACD_Value1_3 >0  && MACD_MAIN1_3 >0 && damiani_f() ==1
       && ( Ticket_L == 0 || Ticket_L == -1 ) 
       && ( Ticket_S == 0 || Ticket_S == -1 ))
    {  
      Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Yellow);
    }

   //売りエントリー
   if(    MACD_Value1_1 <0 && MACD_Value1_2 <0 && MACD_Value1_3 <0 && MACD_MAIN1_3 <0 && damiani_f() ==1
       && ( Ticket_S == 0 || Ticket_S == -1 )
       && ( Ticket_L == 0 || Ticket_L == -1 ))
    {   
      Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Red);     
    } 

   return(0);
  }

関連記事

スイスフラン暴騰騒動

スイスフラン暴騰騒動(2)

###