※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

USDJPYで15分足で試してみてます。

(改修をいろいろ加えている途中のものです。)

 

 

 

//
//エラー定義
//
//バーの数が100未満であれば、エラーとする
Err := If(BarCount()<100,1,0);

//
//データ表示用
//
//36期間のWilliams'%R
//a := willr(36);
a := willr(14);
//データのBollinger Band Bottomを返します。
Bollinger_bottom := BBandBot ( CLOSE , 14 , S , 2 ) ;

//データのBollinger Band Topを返します。
Bollinger_top := BBandTop ( CLOSE , 14 , S , 2 ) ;

//
//買い仕掛けシグナル
//
//Williams'%Rが-70以下になったら、買い仕掛けシグナルON
BuyOpenSignal := If(a<=-70
 and
 (
 Bollinger_bottom < HIGH
 and
 Bollinger_bottom > LOW

 )
 ,1,0);
//BuyOpenSignal := 0;

//
//売り仕掛けシグナル
//
//Williams'%Rが-20以上になったら、売り仕掛けシグナルON
SellOpenSignal := If(a>=-20
 and
 (
 Bollinger_top < HIGH
 and
 Bollinger_top > LOW
 )

,1,0);
//SellOpenSignal := 0;

//
//買い仕切りシグナル
//
//Williams'%Rが-30以上になったら、買い仕切りシグナルON
BuyCloseSignal := a>=-30;
//BuyCloseSignal := If(BuyRate+0.2<HIGH,1,0);
//

//
//売り仕切りシグナル
//
//Williams'%Rが-60以下になったら、売り仕切りシグナルON
SellCloseSignal := a<=-60;
//SellCloseSignal:= If(SellRate-0.3<LOW,0,1);
//
//ストップレート
//
//ストップレート=1.0×ポイント数(通貨ペアにより0.01または0.0001)×100
StopRate := 0.5*Symbolpoint()*100; 

//
//買い値
//
//チャートをBIDに設定しているとみなし、スプレッドを加算する
BuyRate := CLOSE+SymbolPoint()*Spread;

//
//売り値
//
//チャートをBIDに設定しているとみなし、スプレッドを加算しない
SellRate := CLOSE;

//
//現在の買いポジション
//
//前回の買い仕掛け注文が無ければ「NULL」、
//あるいは、前回の買い仕切り注文が無ければ、「前回の買い仕掛け注文値」、
//あるいは、前回の買い仕切り注文が、前回の買い仕掛け注文よりも過去であれば、「前回の買い仕掛け注文値」
//そうで無ければ、「NULL」
BuyPosition :=
  If(BarsSince(Ref(BuyOpen,-1))=NULL,NULL,
  If(BarsSince(Ref(BuyClose,-1))=NULL,ValueWhen(1,BuyOpen<>NULL,BuyOpen),
  If(BarsSince(Ref(BuyOpen,-1))<BarsSince(Ref(BuyClose,-1)),ValueWhen(1,BuyOpen<>NULL,BuyOpen),NULL)));

//
//現在の売りポジション
//
//前回の売り仕掛け注文が無ければ「NULL」、
//あるいは、前回の売り仕切り注文が無ければ、「前回の売り仕掛け注文値」、
//あるいは、前回の売り仕切り注文が、前回の売り仕掛け注文よりも過去であれば、「前回の売り仕掛け注文値」
//そうで無ければ、「NULL」
SellPosition :=
  If(BarsSince(Ref(SellOpen,-1))=NULL,NULL,
  If(BarsSince(Ref(SellClose,-1))=NULL,ValueWhen(1,SellOpen,SellOpen),
  If(BarsSince(Ref(SellOpen,-1))<BarsSince(ref(SellClose,-1)),ValueWhen(1,SellOpen<>NULL,SellOpen),NULL)));

//
//買い仕掛け注文
//
//エラーまたは、買いポジションを持っていれば、「NULL」、
//あるいは、買い仕掛けシグナルONであれば、「買い値」
//そうで無ければ、「NULL」
BuyOpen :=
  If((Err<>0) or (BuyPosition<>NULL),NULL,
  If(BuyOpenSignal,BuyRate,NULL)); 

//
//売り仕掛け注文
//
//エラーまたは、売りポジションを持っていれば、「NULL」、
//あるいは、売り仕掛けシグナルONであれば、「売り値」
//そうで無ければ、「NULL」
SellOpen :=
  If((Err<>0) or (SellPosition<>NULL),NULL,
  If(SellOpenSignal,SellRate,NULL)); 

//
//買いストップ値
//
//買い仕掛け注文がNULLで無ければ、「買い値-ストップレート」、
//あるいは、買いポジションを持っていなければ、「NULL」、
//そうで無ければ、次の内の最大値、
//「前回の買いストップ値」
//「買い仕掛け値-ストップレート」
//「売り値-ストップレート」
BuyStopRate :=
  If(BuyOpen<>NULL,BuyRate-StopRate,
  If(BuyPosition=NULL,NULL,
  Max(Prev,
  Max(BuyPosition-StopRate,SellRate-StopRate))));

//
//売りストップ値
//
//売り仕掛け注文がNULLで無ければ、「売り値-ストップレート」、
//あるいは、売りポジションを持っていなければ、「NULL」、
//そうで無ければ、次の内の最小値、
//「前回の売りストップ値」
//「売り仕掛け値+ストップレート」
//「買い値+ストップレート」
SellStopRate :=
  If(SellOpen<>NULL,SellRate+StopRate,
  If(SellPosition=NULL,NULL,
  Min(Prev,
  Min(SellPosition+StopRate,BuyRate+StopRate))));

//
//買い仕切り注文
//
//買いポジションを持っていなければ、「NULL」、
//あるいは、買い仕切りシグナルONであれば、「売り値」、
//あるいは、売り値が買いストップ値以下であれば、「売り値」、
//そうで無ければ、「NULL」
BuyClose :=
  If(BuyPosition=NULL,NULL,
  If(BuyCloseSignal Or (SellOpen<>NULL),SellRate,
  If(SellRate<=BuyStopRate,SellRate,NULL)));

//
//売り仕切り注文
//
//売りポジションを持っていなければ、「NULL」、
//あるいは、売り仕切りシグナルONであれば、「買い値」、
//あるいは、買い値が売りストップ値以上であれば、「買い値」、
//そうで無ければ、「NULL」
SellClose :=
  If(SellPosition=NULL,NULL,
  If(SellCloseSignal Or (BuyOpen<>NULL),BuyRate,
  If(BuyRate>=SellStopRate,BuyRate,NULL)));

//
//買いドローダウン
//
//買いポジションを持っておらず、買い仕掛け注文がNULLであれば、「0」、
//そうで無ければ、「安値-買い仕掛け値」
BuyDrawDown :=
  If(BuyPosition=NULL and BuyOpen=NULL,0,LOW-BuyPosition);

//
//売りドローダウン
//
//売りポジションを持っておらず、売り仕掛け注文がNULLであれば、「0」、
//そうで無ければ、「売り仕掛け値-高値」
SellDrawDown :=
  If(SellPosition=NULL and SellOpen=NULL,0,SellPosition-HIGH);

//
//買い仕切り後の損益
//
//買い仕切り注文がNULLであれば、「0」、
//そうで無ければ、「買い仕切り値-買い仕掛け値」
BuyProfit :=
  If(BuyClose=NULL,0,BuyClose-BuyPosition);

//
//売り仕切り後の損益
//
//売り仕切り注文がNULLであれば、「0」、
//そうで無ければ、「売り仕掛け値-売り仕切り値」
SellProfit :=
  If (SellClose=NULL,0,SellPosition-SellClose);

//
//合計損益
//
Profit := Cum(BuyProfit+SellProfit);

//
//合計ドローダウン
//
DrawDown := If((BuyPosition=NULL) and (SellPosition=NULL),NULL,Ref(Profit,-1) + BuyDrawDown + SellDrawDown);

//
//買い仕切り注文(自動売買)
//
//買い仕切り注文がNULLでは無く、OpenBuyイベント数がCloseBuyイベント数より大きければ、「1」、
//そうで無ければ、「0」
CloseBuy := If((BuyClose<>NULL) and (EventCount('OpenBuy')>EventCount('CloseBuy')),1, 0);

//
//売り仕切り注文(自動売買)
//
//売り仕切り注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数より大きければ、「1」、
//そうで無ければ、「0」
CloseSell := If((SellClose<>NULL) and (EventCount('OpenSell')>EventCount('CloseSell')),1, 0);

//
//買い仕掛け注文(自動売買)
//
//買い仕掛け注文がNULLでは無く、OpenBuyイベント数がCloseBuyイベント数と等しければ、「1」、
//そうで無ければ、「0」
OpenBuy := If((BuyOpen<>NULL) and (EventCount('OpenBuy')=EventCount('CloseBuy')),1, 0);

//
//売り仕掛け注文(自動売買)
//
//売り仕掛け注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数と等しければ、「1」、
//そうで無ければ、「0」
OpenSell := If((SellOpen<>NULL) and (EventCount('OpenSell')=EventCount('CloseSell')),1, 0);