戦略開発者のニーズ
異なる状況に対して,異なる指標で判断する必要があります. 異なる開設条件に応じて,異なるストップ・ロスの差を設定できますか?
例えば,従来のモデルでは,平仓条件を書き出すのに,異なる開仓条件を区別しない.
このコードは,従来型の,単純で区別のない,ポジション条件の策略です.
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線は任意のグループの開仓信号であることができる. (信号が現れた順番で最初の開仓信号を取ります)
グループ化されていない平成の条件は,グループ化されていない開設条件のみで平成することができます.
信号フィルタリングとは,平面信号のフィルタリングを意味する.
優先順位は以下の通りです.
フィルターなしのモデル:
注意: グループ化されていない平仓条件は,グループ化されていない平仓条件のみで開設できます.
プログラミングでこれらの指令をどのようにグループ化するかを,いくつかの戦略の例で説明します.
フィルターモデル
取引方法:20周期と60周期均等の線金叉死叉をトレンド判断基準として使う.
コード:
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サイクル均等金叉死叉を初開札条件とする.
コード:
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言語がグループ化命令の処理方法を見ることができます.私たちは,自分の策略論理に基づいて異なるグループ化要求を作成することができます.この方法で,表現したい策略論理をコードの中で最も明確で誤り最小の方法で表現することができます.