*

[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);
  }

関連記事

ヤフーカードなかなかよい

キャンペーンで 10000円分の Tポイントがもらえるということで、申し込んでみました。

記事を読む

[FX] リアル口座 2015/4/6-10 結果

今週のリアル口座の結果ですが、やや赤字となってしまいました。 デモ口座では15万円ほど勝ってい

記事を読む

電気代値上げ

* うちの高槻の事務所にも関西電力の値上げの通知が。 ちょっと待ってよ。 年収ラボによると

記事を読む

[FX] 新たな Tokyo Boxプログラム

Tokyo Box(別名多数あり) シリーズは、 値動きの少ない東京時間には動作しない

記事を読む

2024年8月7日 日本株反騰中?

この記事を書いているのは 8月7日午前10時20分なのですが、本日の日経平均の動向の指標となるのが日

記事を読む

[FX] Tokyo Box(ロンドン・コーリング) の新作プログラム (4) 1週間実働結果

前回の記事「Tokyo Box(ロンドン・コーリング) の新作プログラム (3)」の続きです。

記事を読む

【FX】FX に付いての雑談

本日は FX についての雑談。 自動売買プログラム(EA)での FX トレードは、ふつう

記事を読む

【FX】Best Scapler という EA

Best Scapler という EA がありまして、これもテスト中の謎な EA なわけです。

記事を読む

【FX】恐ろしい自動売買プログラム

本日恐ろしい経験をしました。 X(仮称)というゴールド専用スキャルピングの自動売買プログラム(

記事を読む

【FX】MT4 build1420 の不具合(2)

以前の記事「【FX】MT4 build1420 の不具合」の続きです。 前回の記事へのコメント

記事を読む

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の傾きなど見てる方もいて、もう少しいろいろ試してみようと思います。
    どうもありがとうございました。

matsu へ返信する コメントをキャンセル

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

2026年3月の配当

3月はまだ終わっていませんが、めぼしい配当が済んだので一応書いておきま

AIで孫と遊ぶ

本日午前中は春休み中の孫2人を預かり自宅で仕事をしていました・・・半分

2026-3-24 投資信託追加購入

投資信託の基準価額は毎日変更されます。 なので、定期購入している

純金上場信託(金の果実)

純金上場信託(金の果実)【コード:1540】という ETF があります

「経済とお金の地図」という Youtubeサイト

面白いサイトにはまっています。「経済とお金の地図」という Yo

→もっと見る

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