0
フォロー
78
フォロワー

定量的取引戦略におけるグループ化指示の記述

作成日:: 2019-07-10 09:55:13, 更新日:: 2019-07-16 15:37:32
comments   0
hits   2378

グループ化指令の理由

戦略開発者のニーズ

異なる状況に対して,異なる指標で判断する必要があります. 異なる開設条件に応じて,異なるストップ・ロスの差を設定できますか?

例えば,従来のモデルでは,平仓条件を書き出すのに,異なる開仓条件を区別しない.

このコードは,従来型の,単純で区別のない,ポジション条件の策略です.

MA5^^MA(C,5);
MA10^^MA(C,10);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K..SMA(RSV,3,1);
D..SMA(K,3,1);
CROSS(MA5,MA10)||CROSS(K,D),BK;
C>HV(H,10)||C<BKPRICE-5*MINPRICE,SP;
AUTOFILTER;

グループ化指令を使うのは

グループ指令は,開平条件をn組に分けることができ,あるグループの条件開封のポジションは,あるグループの対応する平仓条件のみが平仓できる.他のグループの平仓条件が満たされると,信号は出ないし,委託もされない.

例えば:

最初のグループは 条件を重ねます

MA5^^MA(C,5);
MA10^^MA(C,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SP;

2つ目のグループには 条件を入れます

RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K..SMA(RSV,3,1);
D..SMA(K,3,1); 
CROSS(K,D),BK; 
C>HV(H,10)||C<BKPRICE-5*MINPRICE,SP;

では,これらの条件をどのように実現するか見てみましょう.

グループ化指令の書き方

まず,フィルタリングモデルと非フィルタリングモデルに分けます.

  • フィルタリングモデル:異なる開設条件を異なる平仓条件で平仓にしたい,指令グループ化を使用して実現できる。

  • 非フィルタリングモデル:初入場戦略は加仓戦略とは異なり,異なるストップ・ロスト・ピリオド戦略で平仓をしたい場合は,指令グループ化を使用して実現できる。

フィルターモデル

//A组指令
A组的开多条件,BK('A');
A组的开空条件,SK('A');
A组的平多条件,SP('A');
A组的平空条件,BP('A');
//B组指令
B组的开多条件,BPK('B');
B组的开空条件,SPK('B');
B组的平多条件,SP('B');
B组的平空条件,BP('B');
AUTOFILTER;//过滤函数

注:フィルターモデルのグループ化は,取引指令の後にグループに加入し,単引数で囲む必要があります.例えばBK ((‘A’)

非フィルターモデル

//A组指令
A组的开多条件1,BK('A',2);
A组的开空条件1,SK('A',2);
A组的加多条件2,BK('A',1);
A组的加空条件2,SK('A',1);
A组的平多条件,SP('A',GROUPBKVOL('A'));
A组的平空条件,BP('A',GROUPSKVOL('A'));
//B组指令
B组的加多条件,BK('B',1);
B组的加空条件,SK('B',1);
B组的平多条件1,SP('B',GROUPBKVOL('B'));
B组的平空条件1,BP('B',GROUPSKVOL('B'));

注意:非フィルターモデルのグループ化は,取引指示後にグループと手数値を追加する必要があり,グループは単一の引数で囲まれなければならない. BK ((‘A’,2) のように

グループ化指令の動作メカニズム

フィルタリングモデル: グループフィルタリングと信号フィルタリング

  • グループフィルターとは,前K線信号がグループAからの開仓信号である場合 ((BK SK BPK SPK) 現在のK線はグループAの平仓信号のみである.前K線信号がグループAからの平仓信号である場合 ((BP SP) 現在のK線は任意のグループの開仓信号であることができる. (信号が現れた順番で最初の開仓信号を取ります)

  • グループ化されていない平成の条件は,グループ化されていない開設条件のみで平成することができます.

信号フィルタリングとは,平面信号のフィルタリングを意味する.

優先順位は以下の通りです.

  • 上のK線はBKで,現在のK線はSPKまたはSPでなければなりません (SPKがSPより優先し,以下同理)
  • 上のK線はSKで,現在のK線はBPKかBPでなければなりません.
  • 上のK線はBPで,現在のK線はBKかSKでなければなりません.
  • 上のK線はSPで,現在のK線はBKかSKでなければなりません.
  • 上のK線はBPKで,現在のK線はSPKかSPでなければなりません.
  • 上のK線はSPKで,現在のK線はBPKかBPでなければなりません.

フィルターなしのモデル:

  • 前回の信号がグループAからの開仓信号である場合,次の信号はグループAの加仓信号または平仓信号でなければならない.
  • 前回の信号がグループAの平仓信号で,グループAはポジションを0と持っていた場合,次の信号は任意のグループの開仓信号である.
  • グループAが0より大きなポジションを保有している場合,グループAのポジション開設信号または平仓信号が必要である.

注意: グループ化されていない平仓条件は,グループ化されていない平仓条件のみで開設できます.

グループ化指令の事例分析

プログラミングでこれらの指令をどのようにグループ化するかを,いくつかの戦略の例で説明します.

フィルターモデル

取引方法:20周期と60周期均等の線金叉死叉をトレンド判断基準として使う.

  • 20周期平均線が60周期平均線より大きい上で多行する。逆に空行する。
  • 多トレンドでは,最高値が10根のk線新高を突破し陽線である場合,トレンドは多する。平仓時,より大きな止損点で平仓を止めて平仓または平均線死叉平仓が発生する。空調は逆である。
  • 多トレンドでは,KDJ指数金叉で陽線であれば波段を多する。平仓時,より小さなストップポイントで平仓を止めて平仓を止めて,または波段の開仓k線最低点で平仓を止めて,下落する。逆に空いている。

コード:

MA20^^MA(C,20);
MA60^^MA(C,60);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
HH:=HV(H,10);
LL:=LV(L,10);
MA20>MA60&&H>HH&&C>O,BK('A');
MA20<MA60&&L<LL&&C<O,SK('A');
L<LV(L,5)||CROSSDOWN(MA20,MA60)||C<BKPRICE-5*MINPRICE,SP('A');
H>HV(H,5)||CROSSUP(MA20,MA60)||C>SKPRICE+5*MINPRICE,BP('A');//只平A组开仓
MA20>MA60&&CROSSUP(K,D)&&C>O,BK('B');
MA20<MA60&&CROSSDOWN(K,D)&&C<O,SK('B');
C>BKPRICE+5*MINPRICE||C<BKPRICE-2*MINPRICE||C<REF(L,BARSBK),SP('B');
C<SKPRICE-5*MINPRICE||C>SKPRICE+2*MINPRICE||C>REF(H,BARSSK),BP('B');//只平B组开仓
//不同的开仓条件开仓,用不同的平仓条件,有针对性的平仓。达到不同行情试用不同策略的目的。
AUTOFILTER;

非フィルターモデル

取引方法: 5サイクルと10サイクル均等金叉死叉を初開札条件とする.

  • 負のポジションなしで最初の多ポジションを開く前に5周期と60周期平均線金叉加多ポジション. 負のポジションなしで最初の空置前に5周期と60周期平均線死叉加空ポジション.
  • 5周期大60周期トレンド下では,最高価格が10根k線新高を打つ,次に二度増仓する. 5周期小60周期トレンド下では,最低価格が10根k線新低を打つ,次に二度空仓する.
  • 最初の追加ポジションの場合は,5根のk線を新低またはより小さなストップ・ローズで平仓する。平空の逆である。
  • 2回目追加後,5周期と60周期平均線で死叉平仓。平空反転。

コード:

MA5^^MA(C,5);
MA10^^MA(C,10);
MA20:=MA(C,20);
MA60^^MA(C,60);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
HH:=HV(H,10);
LL:=LV(L,10);
CROSSUP(MA5,MA10)&&BKVOL=0&&C>=O,BK('A',2);
CROSSDOWN(MA5,MA10)&&SKVOL=0&&C<=O,SK('A',2);
CROSSUP(MA5,MA60)&&ISLASTBK&&BKVOL=2,BK('A',1);
CROSSDOWN(MA5,MA60)&&ISLASTSK&&SKVOL=2,SK('A',1);
MA5>MA60&&H>HH&&ISLASTSP&&REF(GROUPBKVOL('A'),BARSSP+1)>0,BK('B',1);
MA5<MA60&&L<LL&&ISLASTBP&&REF(GROUPSKVOL('A'),BARSBP+1)>0,SK('B',1);
L<LV(L,5)||C<REF(L,BARSBK)&&(C<BKPRICE-2*MINPRICE),SP('A',GROUPBKVOL('A'));
H>HV(H,5)||C>REF(H,BARSSK)&&(C>SKPRICE+2*MINPRICE),BP('A',GROUPSKVOL('A'));
C>BKPRICE+10*MINPRICE||CROSSDOWN(MA5,MA60),SP('B',BKVOL);
C<SKPRICE-10*MINPRICE||CROSS(MA5,MA60),BP('B',SKVOL);

以上は,この2つのタイプのモデルに関する具体的なケース分析であり,読者はMy言語がグループ化命令の処理方法を見ることができます.私たちは,自分の策略論理に基づいて異なるグループ化要求を作成することができます.この方法で,表現したい策略論理をコードの中で最も明確で誤り最小の方法で表現することができます.