960 浏览
0

5,10,60日均线,,60日均线作为多空分界线

开多单条件:5大于10,且k线价格在60日均线上开多单;平多单条件:5小于10,且k线价格在60日均线下平多单

开空单条件:5小于10,且k线价格在60日均线下开空单;平空单条件:5大于10,且k线价格在60日均线上平空单

jzd1997 已回答的问题 2023年10月30日
0

开单加上60日线判断可以,平单加上60日条件可以造成单子始终没平掉。

下面是我写的策略,回测了一下,表现很一般

'''
from tqsdk import TqApi, TqAuth, TargetPosTask,TqBacktest,TqSim,TqAccount
from tqsdk.tafunc import ma
from datetime import date
import logging
  SHORT = 5  # 短周期
MIDDLE = 20  # 中周期
LONG = 60  # 中周期
ORDER_NUM = 1 # 手数
SYMBOL = "DCE.cs2403"  # 合约代码
logging.basicConfig(filename='./logs/out_tripema.log', level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s')
 # 判断是多头还是空头市场 1:多头 -1:空头 0:震荡
def marketTrend(price,klines):
    ma60 = ma(klines["close"], LONG)
     if price > ma60.iloc[-1] :
        return 1
    elif price <ma60.iloc[-1] :
        return -1
    return 0
 api = TqApi(TqSim(), backtest=TqBacktest(start_dt=date(2023, 9, 1), end_dt=date(2023, 10, 30)), auth=TqAuth("39627020", "1qazzaq1"))
print("策略开始运行")
  data_length = 100  # k线数据长度
target_pos = TargetPosTask(api, SYMBOL)
quote = api.get_quote(SYMBOL)
 while True:
    api.wait_update()        
    if api.is_changing(quote, "last_price"):
        print(quote.datetime,quote.last_price)
        klines = api.get_kline_serial(SYMBOL, duration_seconds=60*60*24, data_length=data_length)
        short_avg = ma(klines["close"], SHORT)  # 短周期
        middle_avg = ma(klines["close"], MIDDLE)  # 长周期
        trend = marketTrend(quote.last_price,klines)
        # 均线下穿,做空
        if short_avg.iloc[-2] > middle_avg.iloc[-2] and short_avg.iloc[-1] > middle_avg.iloc[-1]:
            print("均线下穿,平多")
            target_pos.set_target_volume(0)
            if trend==-1:
                print("空头市场,均线下穿,做空")
                target_pos.set_target_volume(-ORDER_NUM)
                                  # 均线上穿,做多
        if short_avg.iloc[-2] < middle_avg.iloc[-2] and short_avg.iloc[-1] > middle_avg.iloc[-1]:
            print("均线上穿,平空")
            target_pos.set_target_volume(0)
            if trend==1:
                print("多头市场,均线上穿,做多")
                target_pos.set_target_volume(ORDER_NUM)

jzd1997 已回答的问题 2023年10月30日
您正在查看1个答案中的1个,单击此处查看所有答案。