ディアブロ - ページ 12

 

筆者の手法と同じように注文を出すExpert Advisorを作ったのですが、違う点があります。ATRに応じた水準で注文を出す(手法がWin-Winなら、どの水準から出すかは関係ない)。新しい一日の始まりに、すべての注文を閉じて削除します(TPとSLがなく、利益をもたらさない注文を閉じる他の方法を知らないだけです)。

パラメータの最適 化を図ることができます。私はただ怠惰なだけで、この戦略を信じてはいません。

ファイル:
 
khorosh:
批判が理屈っぽくても、どうしても言いたいことがあるときは、ごちゃごちゃ言うより黙ってたほうがいい。
鏡を見ることを忘れないでください。
 

Diablo v09.02.12 (Immortal Version)

価格から一定の距離をおいて等間隔で発注される注文には、ストレート注文(価格からストップ高で買い、ストップ安で売り)とリバース注文(価格からリミット高で売り、リミット安で買い)があります。逆指値注文と指値注文は、同じレベル(ペア)で発注され、逆指値注文と指値注文は、売り注文と買い注文と同様です。

すべての注文は同じ数量で、ストップロスは注文間のステップと同じです。

ストレート注文(Buy StopとSell Stop)には、Take Profitはありません。逆指値注文(Sell Limit と Buy Limit)は、最初の注文(価格に最も近い)は注文の間隔が1ステップ、2番目の注文(少し遠い)は3ステップ、3番目の注文は5ステップと、算術的にTake Profitが増加します。


発注を行うためのスクリプトです。

// Diablo v09.02.12
#property copyright "Jon Katana"
#property show_inputs
extern int Step=0,Spread=0,Levels=0;
extern double Up=0,Vol=0;
int start()
{for(int i=0;i<(Levels);i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-1)*Step*Point,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Up-(i+1)*Step*Point,0,Up-(i*Step-Spread)*Point,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+1)*Step+Spread)*Point,Up-(Step*(i+1)+Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Up-((i+1)*Step-Spread)*Point,0,Up-(i+2)*Step*Point,Up+i*Step*Point,0,0);}
return(0);}

このシステムは完全に不滅です。放っておいても、最終的には必ず利益かゼロで終わります。

雪だるま式に利益が増え、1つの値動きを何度も集めることができるのです。平坦な場所では、利益は中程度かゼロになる。最も遅いバリエーションは、価格が一方向に動くが、各レベルから一歩ずつロールバックし、さらに進む「ドラゴン」パターンである。この場合、利益またはゼロになるまでに少し時間がかかるだけです。

そのため、すでに通過した水準にミニ補正でタッチしないように、水準間のステップを計算して注文を出すようにします。

注文を出したレベルを超えない限り、このスキームは放置しておいても大丈夫です。もう一つの方法は、ディアブロに従って、ある利益(例えば、1ステップの大きさ)に達したときに、その後再び注文を並べ替えて閉じる、あるいは、利益で一度だけ閉じるというものである。

 

スクリプトの修正:売り指値 注文のスプレッドに誤ったオフセットがありました。

// Diablo v13.02.12
#property copyright "Jon Katana"
#property show_inputs
extern int Step=0,Spread=0,Levels=0;
extern double Up=0,Vol=0;
int start()
{for(int i=0;i<(Levels);i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-1)*Step*Point,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Up-(i+1)*Step*Point,0,Up-(i*Step-Spread)*Point,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+1)*Step+Spread)*Point,Up-(Step*(i+1)-Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Up-((i+1)*Step-Spread)*Point,0,Up-(i+2)*Step*Point,Up+i*Step*Point,0,0);}
return(0);}
 

extern int Step=0,Spread=0,Levels=0。
extern double Up=0,Vol=0.

ここにどのようなパラメータを入れればうまくいくのでしょうか?

 
UP変数をascに代入して、現在の価格から 注文するようにしたらどうでしょうか・・・。
 
#property copyright "Jon Katana"
#property show_inputs
extern int Step=50,Spread=2,Levels=5;
extern double Up=0,Vol=0.1;
int TotalOrders,i;
int start()
{Up=Ask;
        TotalOrders=OrdersTotal();
        for (i=0; i<=TotalOrders; i++){
                 if (OrderSelect(0,SELECT_BY_POS)==true){
                    if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,5,Red);
                    if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,5,Red);
                    if (OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_BUYLIMIT) OrderDelete(OrderTicket(),Green);
                 
                 }
        }

for(int i=0;i<(Levels);i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*Point,0,Up+(i-1)*Step*Point,0,0,0);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Up-(i+1)*Step*Point,0,Up-(i*Step-Spread)*Point,0,0,0);
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up+i*Step*Point,0,Up+((i+1)*Step+Spread)*Point,Up-(Step*(i+1)-Spread)*Point,0,0);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Up-((i+1)*Step-Spread)*Point,0,Up-(i+2)*Step*Point,Up+i*Step*Point,0,0);}
return(0);
}
スクリプトにクリーンアップを追加しました。つまり、未決済または保留の注文がある場合、まずすべてを削除し、次にパラメータに従って保留の注文を設定します...
 
IronBird:

extern int Step=0,Spread=0,Levels=0;
extern double Up=0,Vol=0

ここにどのようなパラメータを入力すれば動作するのでしょうか?

ステップ - 注文と注文の間のステップをポイント数で表したもの(例:4桁の注文なら20、5桁の注文なら200)。

スプレッド - ピップ単位のスプレッド(例:4桁の場合は2、5桁の場合は20)。

レベル - 注文が発注されるレベルの数(例: 20);

上 - 価格の上にあるラインで、そこから注文が上向きに開始されます(このラインからステップのオフセットで自動的に注文が発注されます)。

Vol - 注文の数量(例:0.1)。

 
nikelodeon:
変数UPをascに代入して、現在の価格から注文するようにすればいいのでは・・・

理由は2つあります。

1) 特定のレベル(抵抗線、支持線、フィボナッチ、ラビット...)から注文を出すことができない。

2)注文が何十件もあり、すぐに発注されない。この間、Askは初期値からずれることがあり、注文の場所やテイクプロフィット、ストップロスが予想外に動くことがあります。これにより、ディーリングセンターは、ペア別ではないレベルで注文を出すことができますが、ペアから2番目の注文をキャッチせずに別々の注文を「引き」、そして損失まで追い込んでしまい、システム全体が破壊されてしまいます。

 
JonKatana:

理由は2つあります。

1) 特定のレベル(抵抗線、支持線、フィボナッチ、ラビット...)から注文を出すことができない。

2)注文が何十件もあり、すぐに発注されない。この間、Askは初期値からずれることがあり、注文の場所やテイクプロフィット、ストップロスが予想外に動くことがあります。これにより、ディーリングセンターは、ペアによるものではないレベルで注文を開くことができますが、ペアの2番目の注文をキャッチすることなく、別々の注文を「引き」、そして損失に追い込み、システム全体を台無しにすることになるのです。

現在の価格を 用いて最初の2つの注文を設定し、最初の注文の価格に対する他の注文の価格を計算することができます。最初の2つの注文は、成行注文であってもよい。