見出し画像

自動売買BOTの改良 その6

今回は時間経過で損切りするというのをやってみます。

いつまでも利益が乗らないポジションを持っていても仕方ないですから一定時間たったらクローズするというものです。

適当に変数を割り当てましょう。今回はj=0とします。以下のように宣言してください。

j = 0

もしうまくいかなかったらループの中のglobalの中にも宣言してください。

def OnTick():

   global j,lot,lmt,lct,cl,vol,triggerx,midprice,balance,a,b,c,k,l,m,n,b0,c0,v,w,x,y,z,sn,volume,macd, macdsignal,macdhist,slowk,slowd,r,s,t,pnl,p,posi,lot0

次はポジションを持っている間だけjの値をカウントしていきます。
以下の部分に条件式を入れます。

if((now.minute == 0 or now.minute % 5 == 0) and now.second < 13) or tickCounts < 3:
   
   if posi == "BUY" or posi == "SELL":
      
      j += 1

この部分は5分に一回実行される部分ですので1時間後にポジションクローズするならば5分×12ということで損切りのための条件式は以下のようになります。jの値を初期化するのを忘れないでください。

if(j >= 12 and posi == "BUY"):
       try:
           order = bitflyer.create_order(symbol = 'BTC/JPY',type='market',side='sell',amount=lot0,params = { "product_code" : "FX_BTC_JPY"})
           posi = ""
           b0 += 1
       j = 0
           pprint( order )
       except Exception as e:
           time.sleep(2)

if(j >= 12 and posi == "SELL"):
       try:
           order = bitflyer.create_order(symbol = 'BTC/JPY',type='market',side='buy',amount=lot0,params = { "product_code" : "FX_BTC_JPY"})
           posi = ""
           b0 += 1
           j = 0
           pprint( order )
       except Exception as e:
           time.sleep(2)

これで無駄なポジションを1時間で切ることが出来ます。

今回は以上です。

この記事が気に入ったらサポートをしてみませんか?