「サンプルソース」の編集履歴(バックアップ)一覧はこちら

サンプルソース」(2007/11/03 (土) 23:21:54) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p>//<br> //エラー定義<br> //<br> //バーの数が100未満であれば、エラーとする<br> Err := If(BarCount()&lt;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&lt;=-70<br>  and<br>  (<br>  Bollinger_bottom &lt; HIGH<br>  and<br>  Bollinger_bottom &gt; LOW</p> <p> )<br>  ,1,0);<br> //BuyOpenSignal := 0;</p> <p>//<br> //売り仕掛けシグナル<br> //<br> //Williams'%Rが-20以上になったら、売り仕掛けシグナルON<br> SellOpenSignal := If(a&gt;=-20<br>  and<br>  (<br>  Bollinger_top &lt; HIGH<br>  and<br>  Bollinger_top &gt; LOW<br>  )</p> <p>,1,0);<br> //SellOpenSignal := 0;</p> <p>//<br> //買い仕切りシグナル<br> //<br> //Williams'%Rが-30以上になったら、買い仕切りシグナルON<br> BuyCloseSignal := a&gt;=-30;<br> //BuyCloseSignal := If(BuyRate+0.2&lt;HIGH,1,0);<br> //</p> <p>//<br> //売り仕切りシグナル<br> //<br> //Williams'%Rが-60以下になったら、売り仕切りシグナルON<br> SellCloseSignal := a&lt;=-60;<br> //SellCloseSignal:= If(SellRate-0.3&lt;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&lt;&gt;NULL,BuyOpen),<br>   If(BarsSince(Ref(BuyOpen,-1))&lt;BarsSince(Ref(BuyClose,-1)),ValueWhen(1,BuyOpen&lt;&gt;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))&lt;BarsSince(ref(SellClose,-1)),ValueWhen(1,SellOpen&lt;&gt;NULL,SellOpen),NULL)));</p> <p>//<br> //買い仕掛け注文<br> //<br> //エラーまたは、買いポジションを持っていれば、「NULL」、<br> //あるいは、買い仕掛けシグナルONであれば、「買い値」<br> //そうで無ければ、「NULL」<br> BuyOpen :=<br>   If((Err&lt;&gt;0) or (BuyPosition&lt;&gt;NULL),NULL,<br>   If(BuyOpenSignal,BuyRate,NULL)); </p> <p>//<br> //売り仕掛け注文<br> //<br> //エラーまたは、売りポジションを持っていれば、「NULL」、<br> //あるいは、売り仕掛けシグナルONであれば、「売り値」<br> //そうで無ければ、「NULL」<br> SellOpen :=<br>   If((Err&lt;&gt;0) or (SellPosition&lt;&gt;NULL),NULL,<br>   If(SellOpenSignal,SellRate,NULL)); </p> <p>//<br> //買いストップ値<br> //<br> //買い仕掛け注文がNULLで無ければ、「買い値-ストップレート」、<br> //あるいは、買いポジションを持っていなければ、「NULL」、<br> //そうで無ければ、次の内の最大値、<br> //「前回の買いストップ値」<br> //「買い仕掛け値-ストップレート」<br> //「売り値-ストップレート」<br> BuyStopRate :=<br>   If(BuyOpen&lt;&gt;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&lt;&gt;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&lt;&gt;NULL),SellRate,<br>   If(SellRate&lt;=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&lt;&gt;NULL),BuyRate,<br>   If(BuyRate&gt;=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&lt;&gt;NULL) and (EventCount('OpenBuy')&gt;EventCount('CloseBuy')),1, 0);</p> <p>//<br> //売り仕切り注文(自動売買)<br> //<br> //売り仕切り注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数より大きければ、「1」、<br> //そうで無ければ、「0」<br> CloseSell := If((SellClose&lt;&gt;NULL) and (EventCount('OpenSell')&gt;EventCount('CloseSell')),1, 0);</p> <p>//<br> //買い仕掛け注文(自動売買)<br> //<br> //買い仕掛け注文がNULLでは無く、OpenBuyイベント数がCloseBuyイベント数と等しければ、「1」、<br> //そうで無ければ、「0」<br> OpenBuy := If((BuyOpen&lt;&gt;NULL) and (EventCount('OpenBuy')=EventCount('CloseBuy')),1, 0);</p> <p>//<br> //売り仕掛け注文(自動売買)<br> //<br> //売り仕掛け注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数と等しければ、「1」、<br> //そうで無ければ、「0」<br> OpenSell := If((SellOpen&lt;&gt;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()&lt;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&lt;=-70<br>  and<br>  (<br>  Bollinger_bottom &lt; HIGH<br>  and<br>  Bollinger_bottom &gt; LOW</p> <p> )<br>  ,1,0);<br> //BuyOpenSignal := 0;</p> <p>//<br> //売り仕掛けシグナル<br> //<br> //Williams'%Rが-20以上になったら、売り仕掛けシグナルON<br> SellOpenSignal := If(a&gt;=-20<br>  and<br>  (<br>  Bollinger_top &lt; HIGH<br>  and<br>  Bollinger_top &gt; LOW<br>  )</p> <p>,1,0);<br> //SellOpenSignal := 0;</p> <p>//<br> //買い仕切りシグナル<br> //<br> //Williams'%Rが-30以上になったら、買い仕切りシグナルON<br> BuyCloseSignal := a&gt;=-30;<br> //BuyCloseSignal := If(BuyRate+0.2&lt;HIGH,1,0);<br> //</p> <p>//<br> //売り仕切りシグナル<br> //<br> //Williams'%Rが-60以下になったら、売り仕切りシグナルON<br> SellCloseSignal := a&lt;=-60;<br> //SellCloseSignal:= If(SellRate-0.3&lt;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&lt;&gt;NULL,BuyOpen),<br>   If(BarsSince(Ref(BuyOpen,-1))&lt;BarsSince(Ref(BuyClose,-1)),ValueWhen(1,BuyOpen&lt;&gt;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))&lt;BarsSince(ref(SellClose,-1)),ValueWhen(1,SellOpen&lt;&gt;NULL,SellOpen),NULL)));</p> <p>//<br> //買い仕掛け注文<br> //<br> //エラーまたは、買いポジションを持っていれば、「NULL」、<br> //あるいは、買い仕掛けシグナルONであれば、「買い値」<br> //そうで無ければ、「NULL」<br> BuyOpen :=<br>   If((Err&lt;&gt;0) or (BuyPosition&lt;&gt;NULL),NULL,<br>   If(BuyOpenSignal,BuyRate,NULL)); </p> <p>//<br> //売り仕掛け注文<br> //<br> //エラーまたは、売りポジションを持っていれば、「NULL」、<br> //あるいは、売り仕掛けシグナルONであれば、「売り値」<br> //そうで無ければ、「NULL」<br> SellOpen :=<br>   If((Err&lt;&gt;0) or (SellPosition&lt;&gt;NULL),NULL,<br>   If(SellOpenSignal,SellRate,NULL)); </p> <p>//<br> //買いストップ値<br> //<br> //買い仕掛け注文がNULLで無ければ、「買い値-ストップレート」、<br> //あるいは、買いポジションを持っていなければ、「NULL」、<br> //そうで無ければ、次の内の最大値、<br> //「前回の買いストップ値」<br> //「買い仕掛け値-ストップレート」<br> //「売り値-ストップレート」<br> BuyStopRate :=<br>   If(BuyOpen&lt;&gt;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&lt;&gt;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&lt;&gt;NULL),SellRate,<br>   If(SellRate&lt;=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&lt;&gt;NULL),BuyRate,<br>   If(BuyRate&gt;=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&lt;&gt;NULL) and (EventCount('OpenBuy')&gt;EventCount('CloseBuy')),1, 0);</p> <p>//<br> //売り仕切り注文(自動売買)<br> //<br> //売り仕切り注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数より大きければ、「1」、<br> //そうで無ければ、「0」<br> CloseSell := If((SellClose&lt;&gt;NULL) and (EventCount('OpenSell')&gt;EventCount('CloseSell')),1, 0);</p> <p>//<br> //買い仕掛け注文(自動売買)<br> //<br> //買い仕掛け注文がNULLでは無く、OpenBuyイベント数がCloseBuyイベント数と等しければ、「1」、<br> //そうで無ければ、「0」<br> OpenBuy := If((BuyOpen&lt;&gt;NULL) and (EventCount('OpenBuy')=EventCount('CloseBuy')),1, 0);</p> <p>//<br> //売り仕掛け注文(自動売買)<br> //<br> //売り仕掛け注文がNULLでは無く、OpenSellイベント数がCloseSellイベント数と等しければ、「1」、<br> //そうで無ければ、「0」<br> OpenSell := If((SellOpen&lt;&gt;NULL) and (EventCount('OpenSell')=EventCount('CloseSell')),1, 0);<br>  </p>

表示オプション

横に並べて表示:
変化行の前後のみ表示: