「サンプルソース」の編集履歴(バックアップ)一覧はこちら
「サンプルソース」(2007/11/03 (土) 23:21:54) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<p>//<br>
//エラー定義<br>
//<br>
//バーの数が100未満であれば、エラーとする<br>
Err := If(BarCount()<100,1,0);</p>
<p>//<br>
//データ表示用<br>
//<br>
//36期間のWilliams'%R<br>
//a := willr(36);<br>
a := willr(14);<br>
//データのBollinger Band Bottomを返します。<br>
Bollinger_bottom := BBandBot ( CLOSE , 14 , S , 2 ) ;</p>
<p>//データのBollinger Band Topを返します。<br>
Bollinger_top := BBandTop ( CLOSE , 14 , S , 2 ) ;</p>
<p>//<br>
//買い仕掛けシグナル<br>
//<br>
//Williams'%Rが-70以下になったら、買い仕掛けシグナルON<br>
BuyOpenSignal := If(a<=-70<br>
and<br>
(<br>
Bollinger_bottom < HIGH<br>
and<br>
Bollinger_bottom > LOW</p>
<p> )<br>
,1,0);<br>
//BuyOpenSignal := 0;</p>
<p>//<br>
//売り仕掛けシグナル<br>
//<br>
//Williams'%Rが-20以上になったら、売り仕掛けシグナルON<br>
SellOpenSignal := If(a>=-20<br>
and<br>
(<br>
Bollinger_top < HIGH<br>
and<br>
Bollinger_top > LOW<br>
)</p>
<p>,1,0);<br>
//SellOpenSignal := 0;</p>
<p>//<br>
//買い仕切りシグナル<br>
//<br>
//Williams'%Rが-30以上になったら、買い仕切りシグナルON<br>
BuyCloseSignal := a>=-30;<br>
//BuyCloseSignal := If(BuyRate+0.2<HIGH,1,0);<br>
//</p>
<p>//<br>
//売り仕切りシグナル<br>
//<br>
//Williams'%Rが-60以下になったら、売り仕切りシグナルON<br>
SellCloseSignal := a<=-60;<br>
//SellCloseSignal:= If(SellRate-0.3<LOW,0,1);<br>
//<br>
//ストップレート<br>
//<br>
//ストップレート=1.0×ポイント数(通貨ペアにより0.01または0.0001)×100<br>
StopRate := 0.5*Symbolpoint()*100; </p>
<p>//<br>
//買い値<br>
//<br>
//チャートをBIDに設定しているとみなし、スプレッドを加算する<br>
BuyRate := CLOSE+SymbolPoint()*Spread;</p>
<p>//<br>
//売り値<br>
//<br>
//チャートをBIDに設定しているとみなし、スプレッドを加算しない<br>
SellRate := CLOSE;</p>
<p>//<br>
//現在の買いポジション<br>
//<br>
//前回の買い仕掛け注文が無ければ「NULL」、<br>
//あるいは、前回の買い仕切り注文が無ければ、「前回の買い仕掛け注文値」、<br>
//あるいは、前回の買い仕切り注文が、前回の買い仕掛け注文よりも過去であれば、「前回の買い仕掛け注文値」<br>
//そうで無ければ、「NULL」<br>
BuyPosition :=<br>
If(BarsSince(Ref(BuyOpen,-1))=NULL,NULL,<br>
If(BarsSince(Ref(BuyClose,-1))=NULL,ValueWhen(1,BuyOpen<>NULL,BuyOpen),<br>
If(BarsSince(Ref(BuyOpen,-1))<BarsSince(Ref(BuyClose,-1)),ValueWhen(1,BuyOpen<>NULL,BuyOpen),NULL)));</p>
<p>//<br>
//現在の売りポジション<br>
//<br>
//前回の売り仕掛け注文が無ければ「NULL」、<br>
//あるいは、前回の売り仕切り注文が無ければ、「前回の売り仕掛け注文値」、<br>
//あるいは、前回の売り仕切り注文が、前回の売り仕掛け注文よりも過去であれば、「前回の売り仕掛け注文値」<br>
//そうで無ければ、「NULL」<br>
SellPosition :=<br>
If(BarsSince(Ref(SellOpen,-1))=NULL,NULL,<br>
If(BarsSince(Ref(SellClose,-1))=NULL,ValueWhen(1,SellOpen,SellOpen),<br>
If(BarsSince(Ref(SellOpen,-1))<BarsSince(ref(SellClose,-1)),ValueWhen(1,SellOpen<>NULL,SellOpen),NULL)));</p>
<p>//<br>
//買い仕掛け注文<br>
//<br>
//エラーまたは、買いポジションを持っていれば、「NULL」、<br>
//あるいは、買い仕掛けシグナルONであれば、「買い値」<br>
//そうで無ければ、「NULL」<br>
BuyOpen :=<br>
If((Err<>0) or (BuyPosition<>NULL),NULL,<br>
If(BuyOpenSignal,BuyRate,NULL)); </p>
<p>//<br>
//売り仕掛け注文<br>
//<br>
//エラーまたは、売りポジションを持っていれば、「NULL」、<br>
//あるいは、売り仕掛けシグナルONであれば、「売り値」<br>
//そうで無ければ、「NULL」<br>
SellOpen :=<br>
If((Err<>0) or (SellPosition<>NULL),NULL,<br>
If(SellOpenSignal,SellRate,NULL)); </p>
<p>//<br>
//買いストップ値<br>
//<br>
//買い仕掛け注文がNULLで無ければ、「買い値-ストップレート」、<br>
//あるいは、買いポジションを持っていなければ、「NULL」、<br>
//そうで無ければ、次の内の最大値、<br>
//「前回の買いストップ値」<br>
//「買い仕掛け値-ストップレート」<br>
//「売り値-ストップレート」<br>
BuyStopRate :=<br>
If(BuyOpen<>NULL,BuyRate-StopRate,<br>
If(BuyPosition=NULL,NULL,<br>
Max(Prev,<br>
Max(BuyPosition-StopRate,SellRate-StopRate))));</p>
<p>//<br>
//売りストップ値<br>
//<br>
//売り仕掛け注文がNULLで無ければ、「売り値-ストップレート」、<br>
//あるいは、売りポジションを持っていなければ、「NULL」、<br>
//そうで無ければ、次の内の最小値、<br>
//「前回の売りストップ値」<br>
//「売り仕掛け値+ストップレート」<br>
//「買い値+ストップレート」<br>
SellStopRate :=<br>
If(SellOpen<>NULL,SellRate+StopRate,<br>
If(SellPosition=NULL,NULL,<br>
Min(Prev,<br>
Min(SellPosition+StopRate,BuyRate+StopRate))));</p>
<p>//<br>
//買い仕切り注文<br>
//<br>
//買いポジションを持っていなければ、「NULL」、<br>
//あるいは、買い仕切りシグナルONであれば、「売り値」、<br>
//あるいは、売り値が買いストップ値以下であれば、「売り値」、<br>
//そうで無ければ、「NULL」<br>
BuyClose :=<br>
If(BuyPosition=NULL,NULL,<br>
If(BuyCloseSignal Or (SellOpen<>NULL),SellRate,<br>
If(SellRate<=BuyStopRate,SellRate,NULL)));</p>
<p>//<br>
//売り仕切り注文<br>
//<br>
//売りポジションを持っていなければ、「NULL」、<br>
//あるいは、売り仕切りシグナルONであれば、「買い値」、<br>
//あるいは、買い値が売りストップ値以上であれば、「買い値」、<br>
//そうで無ければ、「NULL」<br>
SellClose :=<br>
If(SellPosition=NULL,NULL,<br>
If(SellCloseSignal Or (BuyOpen<>NULL),BuyRate,<br>
If(BuyRate>=SellStopRate,BuyRate,NULL)));</p>
<p>//<br>
//買いドローダウン<br>
//<br>
//買いポジションを持っておらず、買い仕掛け注文がNULLであれば、「0」、<br>
//そうで無ければ、「安値-買い仕掛け値」<br>
BuyDrawDown :=<br>
If(BuyPosition=NULL and BuyOpen=NULL,0,LOW-BuyPosition);</p>
<p>//<br>
//売りドローダウン<br>
//<br>
//売りポジションを持っておらず、売り仕掛け注文がNULLであれば、「0」、<br>
//そうで無ければ、「売り仕掛け値-高値」<br>
SellDrawDown :=<br>
If(SellPosition=NULL and SellOpen=NULL,0,SellPosition-HIGH);</p>
<p>//<br>
//買い仕切り後の損益<br>
//<br>
//買い仕切り注文がNULLであれば、「0」、<br>
//そうで無ければ、「買い仕切り値-買い仕掛け値」<br>
BuyProfit :=<br>
If(BuyClose=NULL,0,BuyClose-BuyPosition);</p>
<p>//<br>
//売り仕切り後の損益<br>
//<br>
//売り仕切り注文がNULLであれば、「0」、<br>
//そうで無ければ、「売り仕掛け値-売り仕切り値」<br>
SellProfit :=<br>
If (SellClose=NULL,0,SellPosition-SellClose);</p>
<p>//<br>
//合計損益<br>
//<br>
Profit := Cum(BuyProfit+SellProfit);</p>
<p>//<br>
//合計ドローダウン<br>
//<br>
DrawDown := If((BuyPosition=NULL) and (SellPosition=NULL),NULL,Ref(Profit,-1) +
BuyDrawDown + SellDrawDown);</p>
<p>//<br>
//買い仕切り注文(自動売買)<br>
//<br>
//買い仕切り注文がNULLでは無く、OpenBuyイベント数がCloseBuyイベント数より大きければ、「1」、<br>
//そうで無ければ、「0」<br>
CloseBuy := If((BuyClose<>NULL) and
(EventCount('OpenBuy')>EventCount('CloseBuy')),1, 0);</p>
<p>//<br>
//売り仕切り注文(自動売買)<br>
//<br>
//売り仕切り注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数より大きければ、「1」、<br>
//そうで無ければ、「0」<br>
CloseSell := If((SellClose<>NULL) and
(EventCount('OpenSell')>EventCount('CloseSell')),1, 0);</p>
<p>//<br>
//買い仕掛け注文(自動売買)<br>
//<br>
//買い仕掛け注文がNULLでは無く、OpenBuyイベント数がCloseBuyイベント数と等しければ、「1」、<br>
//そうで無ければ、「0」<br>
OpenBuy := If((BuyOpen<>NULL) and
(EventCount('OpenBuy')=EventCount('CloseBuy')),1, 0);</p>
<p>//<br>
//売り仕掛け注文(自動売買)<br>
//<br>
//売り仕掛け注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数と等しければ、「1」、<br>
//そうで無ければ、「0」<br>
OpenSell := If((SellOpen<>NULL) and
(EventCount('OpenSell')=EventCount('CloseSell')),1, 0);<br>
</p>
<p><font color="#FF0000">USDJPYで15分足で試してみてます。</font></p>
<p><font color="#FF0000">(改修をいろいろ加えている途中のものです。)</font></p>
<p> </p>
<p> </p>
<p> </p>
<p>//<br>
//エラー定義<br>
//<br>
//バーの数が100未満であれば、エラーとする<br>
Err := If(BarCount()<100,1,0);</p>
<p>//<br>
//データ表示用<br>
//<br>
//36期間のWilliams'%R<br>
//a := willr(36);<br>
a := willr(14);<br>
//データのBollinger Band Bottomを返します。<br>
Bollinger_bottom := BBandBot ( CLOSE , 14 , S , 2 ) ;</p>
<p>//データのBollinger Band Topを返します。<br>
Bollinger_top := BBandTop ( CLOSE , 14 , S , 2 ) ;</p>
<p>//<br>
//買い仕掛けシグナル<br>
//<br>
//Williams'%Rが-70以下になったら、買い仕掛けシグナルON<br>
BuyOpenSignal := If(a<=-70<br>
and<br>
(<br>
Bollinger_bottom < HIGH<br>
and<br>
Bollinger_bottom > LOW</p>
<p> )<br>
,1,0);<br>
//BuyOpenSignal := 0;</p>
<p>//<br>
//売り仕掛けシグナル<br>
//<br>
//Williams'%Rが-20以上になったら、売り仕掛けシグナルON<br>
SellOpenSignal := If(a>=-20<br>
and<br>
(<br>
Bollinger_top < HIGH<br>
and<br>
Bollinger_top > LOW<br>
)</p>
<p>,1,0);<br>
//SellOpenSignal := 0;</p>
<p>//<br>
//買い仕切りシグナル<br>
//<br>
//Williams'%Rが-30以上になったら、買い仕切りシグナルON<br>
BuyCloseSignal := a>=-30;<br>
//BuyCloseSignal := If(BuyRate+0.2<HIGH,1,0);<br>
//</p>
<p>//<br>
//売り仕切りシグナル<br>
//<br>
//Williams'%Rが-60以下になったら、売り仕切りシグナルON<br>
SellCloseSignal := a<=-60;<br>
//SellCloseSignal:= If(SellRate-0.3<LOW,0,1);<br>
//<br>
//ストップレート<br>
//<br>
//ストップレート=1.0×ポイント数(通貨ペアにより0.01または0.0001)×100<br>
StopRate := 0.5*Symbolpoint()*100; </p>
<p>//<br>
//買い値<br>
//<br>
//チャートをBIDに設定しているとみなし、スプレッドを加算する<br>
BuyRate := CLOSE+SymbolPoint()*Spread;</p>
<p>//<br>
//売り値<br>
//<br>
//チャートをBIDに設定しているとみなし、スプレッドを加算しない<br>
SellRate := CLOSE;</p>
<p>//<br>
//現在の買いポジション<br>
//<br>
//前回の買い仕掛け注文が無ければ「NULL」、<br>
//あるいは、前回の買い仕切り注文が無ければ、「前回の買い仕掛け注文値」、<br>
//あるいは、前回の買い仕切り注文が、前回の買い仕掛け注文よりも過去であれば、「前回の買い仕掛け注文値」<br>
//そうで無ければ、「NULL」<br>
BuyPosition :=<br>
If(BarsSince(Ref(BuyOpen,-1))=NULL,NULL,<br>
If(BarsSince(Ref(BuyClose,-1))=NULL,ValueWhen(1,BuyOpen<>NULL,BuyOpen),<br>
If(BarsSince(Ref(BuyOpen,-1))<BarsSince(Ref(BuyClose,-1)),ValueWhen(1,BuyOpen<>NULL,BuyOpen),NULL)));</p>
<p>//<br>
//現在の売りポジション<br>
//<br>
//前回の売り仕掛け注文が無ければ「NULL」、<br>
//あるいは、前回の売り仕切り注文が無ければ、「前回の売り仕掛け注文値」、<br>
//あるいは、前回の売り仕切り注文が、前回の売り仕掛け注文よりも過去であれば、「前回の売り仕掛け注文値」<br>
//そうで無ければ、「NULL」<br>
SellPosition :=<br>
If(BarsSince(Ref(SellOpen,-1))=NULL,NULL,<br>
If(BarsSince(Ref(SellClose,-1))=NULL,ValueWhen(1,SellOpen,SellOpen),<br>
If(BarsSince(Ref(SellOpen,-1))<BarsSince(ref(SellClose,-1)),ValueWhen(1,SellOpen<>NULL,SellOpen),NULL)));</p>
<p>//<br>
//買い仕掛け注文<br>
//<br>
//エラーまたは、買いポジションを持っていれば、「NULL」、<br>
//あるいは、買い仕掛けシグナルONであれば、「買い値」<br>
//そうで無ければ、「NULL」<br>
BuyOpen :=<br>
If((Err<>0) or (BuyPosition<>NULL),NULL,<br>
If(BuyOpenSignal,BuyRate,NULL)); </p>
<p>//<br>
//売り仕掛け注文<br>
//<br>
//エラーまたは、売りポジションを持っていれば、「NULL」、<br>
//あるいは、売り仕掛けシグナルONであれば、「売り値」<br>
//そうで無ければ、「NULL」<br>
SellOpen :=<br>
If((Err<>0) or (SellPosition<>NULL),NULL,<br>
If(SellOpenSignal,SellRate,NULL)); </p>
<p>//<br>
//買いストップ値<br>
//<br>
//買い仕掛け注文がNULLで無ければ、「買い値-ストップレート」、<br>
//あるいは、買いポジションを持っていなければ、「NULL」、<br>
//そうで無ければ、次の内の最大値、<br>
//「前回の買いストップ値」<br>
//「買い仕掛け値-ストップレート」<br>
//「売り値-ストップレート」<br>
BuyStopRate :=<br>
If(BuyOpen<>NULL,BuyRate-StopRate,<br>
If(BuyPosition=NULL,NULL,<br>
Max(Prev,<br>
Max(BuyPosition-StopRate,SellRate-StopRate))));</p>
<p>//<br>
//売りストップ値<br>
//<br>
//売り仕掛け注文がNULLで無ければ、「売り値-ストップレート」、<br>
//あるいは、売りポジションを持っていなければ、「NULL」、<br>
//そうで無ければ、次の内の最小値、<br>
//「前回の売りストップ値」<br>
//「売り仕掛け値+ストップレート」<br>
//「買い値+ストップレート」<br>
SellStopRate :=<br>
If(SellOpen<>NULL,SellRate+StopRate,<br>
If(SellPosition=NULL,NULL,<br>
Min(Prev,<br>
Min(SellPosition+StopRate,BuyRate+StopRate))));</p>
<p>//<br>
//買い仕切り注文<br>
//<br>
//買いポジションを持っていなければ、「NULL」、<br>
//あるいは、買い仕切りシグナルONであれば、「売り値」、<br>
//あるいは、売り値が買いストップ値以下であれば、「売り値」、<br>
//そうで無ければ、「NULL」<br>
BuyClose :=<br>
If(BuyPosition=NULL,NULL,<br>
If(BuyCloseSignal Or (SellOpen<>NULL),SellRate,<br>
If(SellRate<=BuyStopRate,SellRate,NULL)));</p>
<p>//<br>
//売り仕切り注文<br>
//<br>
//売りポジションを持っていなければ、「NULL」、<br>
//あるいは、売り仕切りシグナルONであれば、「買い値」、<br>
//あるいは、買い値が売りストップ値以上であれば、「買い値」、<br>
//そうで無ければ、「NULL」<br>
SellClose :=<br>
If(SellPosition=NULL,NULL,<br>
If(SellCloseSignal Or (BuyOpen<>NULL),BuyRate,<br>
If(BuyRate>=SellStopRate,BuyRate,NULL)));</p>
<p>//<br>
//買いドローダウン<br>
//<br>
//買いポジションを持っておらず、買い仕掛け注文がNULLであれば、「0」、<br>
//そうで無ければ、「安値-買い仕掛け値」<br>
BuyDrawDown :=<br>
If(BuyPosition=NULL and BuyOpen=NULL,0,LOW-BuyPosition);</p>
<p>//<br>
//売りドローダウン<br>
//<br>
//売りポジションを持っておらず、売り仕掛け注文がNULLであれば、「0」、<br>
//そうで無ければ、「売り仕掛け値-高値」<br>
SellDrawDown :=<br>
If(SellPosition=NULL and SellOpen=NULL,0,SellPosition-HIGH);</p>
<p>//<br>
//買い仕切り後の損益<br>
//<br>
//買い仕切り注文がNULLであれば、「0」、<br>
//そうで無ければ、「買い仕切り値-買い仕掛け値」<br>
BuyProfit :=<br>
If(BuyClose=NULL,0,BuyClose-BuyPosition);</p>
<p>//<br>
//売り仕切り後の損益<br>
//<br>
//売り仕切り注文がNULLであれば、「0」、<br>
//そうで無ければ、「売り仕掛け値-売り仕切り値」<br>
SellProfit :=<br>
If (SellClose=NULL,0,SellPosition-SellClose);</p>
<p>//<br>
//合計損益<br>
//<br>
Profit := Cum(BuyProfit+SellProfit);</p>
<p>//<br>
//合計ドローダウン<br>
//<br>
DrawDown := If((BuyPosition=NULL) and (SellPosition=NULL),NULL,Ref(Profit,-1) +
BuyDrawDown + SellDrawDown);</p>
<p>//<br>
//買い仕切り注文(自動売買)<br>
//<br>
//買い仕切り注文がNULLでは無く、OpenBuyイベント数がCloseBuyイベント数より大きければ、「1」、<br>
//そうで無ければ、「0」<br>
CloseBuy := If((BuyClose<>NULL) and
(EventCount('OpenBuy')>EventCount('CloseBuy')),1, 0);</p>
<p>//<br>
//売り仕切り注文(自動売買)<br>
//<br>
//売り仕切り注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数より大きければ、「1」、<br>
//そうで無ければ、「0」<br>
CloseSell := If((SellClose<>NULL) and
(EventCount('OpenSell')>EventCount('CloseSell')),1, 0);</p>
<p>//<br>
//買い仕掛け注文(自動売買)<br>
//<br>
//買い仕掛け注文がNULLでは無く、OpenBuyイベント数がCloseBuyイベント数と等しければ、「1」、<br>
//そうで無ければ、「0」<br>
OpenBuy := If((BuyOpen<>NULL) and
(EventCount('OpenBuy')=EventCount('CloseBuy')),1, 0);</p>
<p>//<br>
//売り仕掛け注文(自動売買)<br>
//<br>
//売り仕掛け注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数と等しければ、「1」、<br>
//そうで無ければ、「0」<br>
OpenSell := If((SellOpen<>NULL) and
(EventCount('OpenSell')=EventCount('CloseSell')),1, 0);<br>
</p>