*

[FX] PRICE_MEDIAN を使う

公開日: : 最終更新日:2020/03/08 マネー

以前作った ADX 指標を使った EA の yasciiADXcross02 は何度か改良して試しています。

トレンドに乗るのが素早く、降りるのもそこそこ早いのに、長いトレンドを最初から最後までよく捕まえるという優れものです。

Damiani フィルタは効果が薄いので除き、クラウドフィルタとタイムフィルタを加えて yasciiADXcross03 を作りました。

  • エントリシグナル: +DI と -DI のクロス+ADX フィルタ+クラウドフィルタ+タイムフィルタ
  • 決済シグナル: +DI と -DI の反転、もしくはHLBand のブレイク、もしくは固定ロスカット値を割る、もしくは暴落時

ADX の計算にはふつうは終値を使うのですが、試しに半値(PRICE_MEDIAN)を使うと結構面白い結果になりました。

EURUSD 1時間足 2015/3/12-2015/4/8

上が終値、下が半値(高値と低値の平均)を使った場合。

半値の方がはるかに優れていますね。

いつもこうなるとは限りませんが、一目均衡表 でも重視されている半値って実はすごく意味があるなあと思います。

理由は後述します。> [FX] PRICE_MEDIAN を使う (2) 半値の概念

あ、今回の総損益は 1万通貨単位のもので、いつも(1.0ロット=10万通貨単位)の 1/10 になっています。

リアル口座で運用し始めるときはいつも 0.1ロットからなので間違えないようにするため変更しました。

関連記事

プログラムソース yasciiADXcross03d.mq4

//
// yasciiADXcross03d.mq4
//     
//                with cloud filter ,PRICE_MEDIAN, Time filter

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

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

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

extern int in_time = 10; // 取引開始時間
extern int out_time = 20; // 取引停止時間

int       Tenkan_sen=9;
int       Kijun_sen=26;
double    Senkou_span_b=52;

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

int OS1 ;
int OS2 ;
double   OOPL;
double   OOPS;

extern double ILC = 20.0 ; 

int start()
  {

   double lc = ILC;
   if(( Digits ==3 ) ||(Digits ==5)) lc = lc*10.0 ;

    //暴落対策(始め)

   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); 
   OOPL = OrderOpenPrice();
   if( (Bid < FastLL1 || ( OOPL - lc*Point >= Bid ))
       && ( 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( (Ask > FastHH1 || ( OOPS + lc*Point <= Ask ))
       && ( 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) ;
   
     double plusdi2 = iADX(NULL, 0, ADXcrossesPeriod, PRICE_MEDIAN, MODE_PLUSDI, 2);
     double plusdi1 = iADX(NULL, 0, ADXcrossesPeriod, PRICE_MEDIAN, MODE_PLUSDI, 1);
     double minusdi2 = iADX(NULL, 0, ADXcrossesPeriod, PRICE_MEDIAN, MODE_MINUSDI, 2);
     double minusdi1 = iADX(NULL, 0, ADXcrossesPeriod, PRICE_MEDIAN, MODE_MINUSDI, 1);  

     double maindi1 = iADX(NULL, 0, ADXcrossesPeriod, PRICE_MEDIAN, MODE_MAIN, 1); 
     double maindi2 = iADX(NULL, 0, ADXcrossesPeriod, PRICE_MEDIAN, MODE_MAIN, 2);
     double maindi3 = iADX(NULL, 0, ADXcrossesPeriod, PRICE_MEDIAN, MODE_MAIN, 3);
     double mainsig = ( maindi1 + maindi2 + maindi3 ) / 3.0 ;

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

     double cla1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 3, Kijun_sen);
     double clb1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 4, Kijun_sen);



   //買いポジションのエグジット
  
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET);  
   if(    ((plusdi1 < minusdi1 && plusdi2 > minusdi2 )  || Close[1] < FastLL2 - margin ) 
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {     
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Blue);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }    

   //売りポジションのエグジット

   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET); 
   if(    ((plusdi1 > minusdi1 && plusdi2 < minusdi2 )   || Close[1] > FastHH2 + margin ) 
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {     
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Red);
      if( Exit_S ==1 ) {Ticket_S = 0;} 
    }   
    
   //買いエントリー
   if(    ((plusdi1 > minusdi1 && plusdi2 < minusdi2 && maindi1 > 18.0 && maindi1 < 50.0 ) ||  
       (plusdi1 > minusdi1 && maindi1 > 18.0 && maindi1 < 50.0  && maindi1 > mainsig))
       && (Close[1] > cla1 && Close[1] > clb1)
       && (Hour() >= in_time && Hour() <= out_time)
       && ( 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,Blue);
    }
    
   //売りエントリー
    if(    ((plusdi1 < minusdi1 && plusdi2 > minusdi2  && maindi1 > 18.0 && maindi1 < 50.0 ) ||
       (plusdi1 < minusdi1 && maindi1 > 18.0 && maindi1 < 50.0   && maindi1 > mainsig))
       && (Close[1] < cla1 && Close[1] < clb1)
       && (Hour() >= in_time && Hour() <= out_time)
       && ( 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);
  }

関連記事

[FX] ロンドンフィキシングで自動売買

ロンドンフィキシングとは、ロンドン市場の金の取引価格を決定することで、毎日ロンドン時間の午後4時(夏

記事を読む

【FX】ThreeTrader という FX業者

ThreeTrader はよく知らなかったのですが、私が 8月21日から実際に運用している海外の F

記事を読む

【FX】 2023年9月決算

私の FX 自動売買の先月(2023年9月)の決算を出してみました。 ということで、155

記事を読む

FX は釣りのようなもの

FX をバクチのようなものと思っている人が多いですが、 儲かる市場(通貨ペア)を選択する

記事を読む

【FX】2024年6月第1,2週総括

2024年6月の第2週の FXトレード(Fintokei 以外)が終わりました。 自分の備忘録のた

記事を読む

KOSPI ベアETN が熱い (3)

「KOSPI ベアETN が熱い (2)」の続きです。 また、「アメリカ高官が日韓の媒

記事を読む

リベラルアーツ大学という Youtubeチャンネル

昨日、Youtube でちらっと見て、それからひたすら見続けています。>  リベラルア

記事を読む

超シンプルな自動売買プログラム(12) 前週の平均値と逆張り 時間特性

1時間だけのトレード 以前の記事「超シンプルな自動売買プログラム(11) 前週の平均値と逆張り

記事を読む

[FX] FX マイニング第6週 暴走?

以前の記事「FX マイニング第5週」から、本業が忙しくてほったらかしにしていたところ、オソロシイこと

記事を読む

【FX】ほぼストキャス単独での EA(2)

以前の記事「【FX】ほぼストキャス単独での EA」の続きです。 ストキャスティクスのパラメータ

記事を読む

Comment

  1. matsu より:

    はじめまして。
    ADXについて調べていてこちらに辿り着きました。
    yasciiADXcross03d.mq4を試してみたく、MT4のIndicaterにいれてみたのですが、何も表示されません。
    何かやり方があるのでしょうか?
    教えていただけるとうれしいです。
    よろしくお願いします。

    • kotaro.yasuiwa@gmail.com より:

       はじめまして。
       これはインディケーターではなく、EA(自動売買プログラム)ですので Experts フォルダに入れてください。

       EA ですので実際に使用するときはパラメーターを設定する必要があります。
       それにはストラテジーテスターを使って最適化パラメーターを求めます。
       設定するパラメーターは、ADXcrossesPeriod、Fast_period 、in_time、out_time、ILC の5つです。
       in_time = 0 & out_time = 23 とするとタイムフィルタが無効になり、24時間取引するようになります。

  2. matsu より:

    お返事ありがとうございました。
    EAなのですね。
    あまり詳しくなくすみませんでした。
    もしよろしければ、ADX フィルタとクラウドフィルタはどういうフィルタなのか教えていただけないでしょうか?
    よろしくお願いします。

    • kotaro.yasuiwa@gmail.com より:

       この EA は ADXcrosses というインディケーター(MetaTrader4 から無料でダウンロード可)を EA にしたものです。
       インディケーターをお探しなら ADXcrosses をダウンロードされてはいかがでしょうか。

       この EA では ADX はフィルタ(トリガーを実際に採用するかという条件)としてではなく、トリガーとして使います。
       ADXcrossesPeriod は ADX 計算の際のパラメーター(参照期間)です。

       クラウドフィルタは一目均衡表の「雲」の中に現在値があるときは売買を実行しないというフィルタです。

       タイムフィルタは一日のうちの何時から何時まで採用するかというフィルタです。通貨によって取引の多い
      人種が異なりますよね。その人たちが寝静まっている時間帯にはダマシが多いので採用しないというものです。

       ILC は初期ロスカット(initial loss cut)です。pips単位です。
       FP_period はトレーリングストップ機能に使っているパラメータで、その参照期間を示します。

  3. matsu より:

    お返事ありがとうございました。
    ADXcrossesは先日見つけましていれてみたのですが、もう少しサインをふるいにかけたいのと、あと、ローソク足が終わらないうちに+DIと-DIがクロスしたらサインが出ているようですが、ローソク足終了時にクロスが解消されてしまったときどうしようかと思い、いろいろ検索しているところでした。
    クロスが解消されても矢印は消えず、チャートを再表示させると消えるので、それも困ったなと・・・。
    検索してみて、STDDEVやADXの傾きなど見てる方もいて、もう少しいろいろ試してみようと思います。
    どうもありがとうございました。

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

稼げる投資家になるための投資の正しい考え方 -歴史から学ぶ30の教訓- / 上総介

★★★☆☆ 上総介(かずさのすけ)さんという株式投資で成功さ

【FX】EA Gold Stuff という EA

MQL5 フォーラムで 50$で販売されている EA Gold Stu

【FX】エターナルエンジンという EA

MQL5 フォーラムで 599$で販売されている Eternal En

【FX】Yarukami Mnukakashi という EA

MQL5 のサイトで Yarukami Mnukakashi という

ミニPC Hitabt M30A

Hitabt という中華メーカーの M30A というミニPC

→もっと見る

  • アクセスカウンター
PAGE TOP ↑