改為文華8公式
作者:文華財經(jīng) 來源:cxh99.com 發(fā)布時間:2023年05月09日
-
咨詢內(nèi)容:
def init(context):? context.n = 20? ? context.symbol = 'CE.i2012'nbsp; ? context.ratio = 0.8? ? subscribe(symbols=context.symbol, frequency=?' count=2)? ? time = context.now.strftime('H:%M:%S'? ? if ?00:00'< time < ?00:00'or ?00:00'< time < ?00:00'? ? ? ? algo(context)? ? schedule(schedule_func=algo, date_rule=?' time_rule=?00:00'? ? schedule(schedule_func=algo, date_rule=?' time_rule=?00:00'def algo(context):? ? if context.mode == 2:? ? ? ? data = history_n(symbol=context.symbol, frequency=?' count=context.n+1, end_time=context.now, fields='lose,high,low,bob' df=True) # 計算ATR? ? ? ? tr_list = []? ? ? ? for i in range(0, len(data)-1):? ? ? ? ? ? tr = max((data['igh'.iloc[i] - data['ow'.iloc[i]), data['lose'.shift(-1).iloc[i] - data['igh'.iloc[i],? ? ? ? ? ? ? ? ? ? ?data['lose'.shift(-1).iloc[i] - data['ow'.iloc[i])? ? ? ? ? ? tr_list.append(tr)? ? ? ? context.atr = int(np.floor(np.mean(tr_list)))? ? ? ? context.atr_half = int(np.floor(0.5 * context.atr))
? ? ? ? context.don_open = np.max(data['igh'.values[-context.n:])? ? ? ? context.don_close = np.min(data['ow'.values[-context.n:])? ? if context.mode == 1:? ? ? ? data = history_n(symbol=context.symbol, frequency=?' count=context.n, end_time=context.now, fields='lose,high,low'? ? ? ? ? ? ? ? ? ? ? ? ?df=True)?? ? ? ? current_data = current(symbols=context.symbol)? ?? ? ? ? tr_list = []? ? ? ? for i in range(1, len(data)):? ? ? ? ? ? tr = max((data['igh'.iloc[i] - data['ow'.iloc[i]),? ? ? ? ? ? ? ? ? ? ?data['lose'.shift(-1).iloc[i] - data['igh'.iloc[i],? ? ? ? ? ? ? ? ? ? ?data['lose'.shift(-1).iloc[i] - data['ow'.iloc[i])? ? ? ? ? ? tr_list.append(tr)? ? ? ? tr_new = max((current_data[0]['igh' - current_data[0]['ow'),? ? ? ? ? ? ? ? ? ? ?data['lose'.iloc[-1] - current_data[0]['igh',? ? ? ? ? ? ? ? ? ? ?data['lose'.iloc[-1] - current_data[0]['ow')? ? ? ? tr_list.append(tr_new)? ? ? ? context.atr = int(np.floor(np.mean(tr_list)))? ? ? ? context.atr_half = int(np.floor(0.5 * context.atr))?? ? ? ? context.don_open = np.max(data['igh'.values[-context.n:])? ? ? ? context.don_close = np.min(data['ow'.values[-context.n:])? ? context.long_add_point = context.don_open + context.atr_half? ? context.long_stop_loss = context.don_open - context.atr_half? ? context.short_add_point = context.don_close - context.atr_half? ? context.short_stop_loss = context.don_close + context.atr_halfdef on_bar(context, bars):? ? symbol = bars[0]['ymbol'? ? recent_data = context.data(symbol=context.symbol, frequency=?' count=2, fields='lose,high,low'? ? close = recent_data['lose'.values[-1]?? ? position_long = context.account().position(symbol=symbol, side=PositionSide_Long)? ? position_short = context.account().position(symbol=symbol, side=PositionSide_Short)? ? if not position_long and not position_short:? ? ? ? if close > context.don_open:? ? ? ? ? ? order_volume(symbol=symbol, side=OrderSide_Buy, volume=context.atr, order_type=OrderType_Market, position_effect=PositionEffect_Open)? ? ? ? ? ? print('多倉atr'?? ? ? ? if close < context.don_close:? ? ? ? ? ? order_volume(symbol=symbol, side=OrderSide_Sell, volume=context.atr, order_type=OrderType_Market, position_effect=PositionEffect_Open)? ? ? ? ? ? print('空倉atr'? ? if position_long:? ? ? ? if close > context.long_add_point:? ? ? ? ? ? order_volume(symbol=symbol, volume=context.atr_half, side=OrderSide_Buy, order_type=OrderType_Market,position_effect=PositionEffect_Open)? ? ? ? ? ? print('續(xù)加倉0.5atr'? ? ? ? ? ? context.long_add_point += context.atr_half? ? ? ? ? ? context.long_stop_loss += context.atr_half? ? ? ? if close < context.long_stop_loss:? ? ? ? ? ? volume_hold = position_long['olume'? ? ? ? ? ? if volume_hold >= context.atr_half:? ? ? ? ? ? ? ? order_volume(symbol=symbol, volume=context.atr_half, side=OrderSide_Sell, order_type=OrderType_Market, position_effect=PositionEffect_Close)? ? ? ? ? ? else:? ? ? ? ? ? ? ? order_volume(symbol=symbol, volume=volume_hold, side=OrderSide_Sell, order_type=OrderType_Market,position_effect=PositionEffect_Close)? ? ? ? ? ? print('多倉0.5atr'? ? ? ? ? ? context.long_add_point -= context.atr_half? ? ? ? ? ? context.long_stop_loss -= context.atr_half? ? if position_short:? ? ? ? if close < context.short_add_point:? ? ? ? ? ? order_volume(symbol = symbol, volume=context.atr_half, side=OrderSide_Sell, order_type=OrderType_Market, position_effect=PositionEffect_Open)? ? ? ? ? ? print('續(xù)加倉0.5atr'? ? ? ? ? ? context.short_add_point -= context.atr_half? ? ? ? ? ? context.short_stop_loss -= context.atr_half? ? ? ? if close > context.short_stop_loss:? ? ? ? ? ? volume_hold = position_short['olume'? ? ? ? ? ? if volume_hold >= context.atr_half:? ? ? ? ? ? ? ? order_volume(symbol=symbol, volume=context.atr_half, side=OrderSide_Buy, order_type=OrderType_Market, position_effect=PositionEffect_Close)? ? ? ? ? ? else:? ? ? ? ? ? ? ? order_volume(symbol=symbol, volume=volume_hold, side=OrderSide_Buy, order_type=OrderType_Market,position_effect=PositionEffect_Close)? ? ? ? ? ? print('空倉0.5atr'? ? ? ? ? ? context.short_add_point += context.atr_half? ? ? ? ? ? context.short_stop_loss += context.atr_half
?
?來源:程序化99
-
文華技術(shù)人員:
??來源:程序化99
-
文華技術(shù)人員:這是PYTHON源碼,需要聯(lián)系專門開發(fā)同事,預(yù)計需要兩周以上時間。有結(jié)果給您跟帖回復(fù)。
?
?來源: www.weiqiv.net.cn
-
文華客服:
?好的
?
-
網(wǎng)友回復(fù):
?參考;
TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//真實波幅
ATR:=MA(TR,26); //求26個周期內(nèi)真實波幅的簡單移動平均
TC..INTPART((MONEYTOT*0.8/(UNIT*ATR)));//根據(jù)權(quán)益的80%計算下單手?jǐn)?shù)
HH:=HV(H,20);
LL:=LV(L,20);
CROSSUP(C,HH)&&ISLASTBK=0&&ISLASTSK=0&&BARPOS>=26,BK(TC);//最新價超過20周期的最高值,首次買入開倉,手?jǐn)?shù)為TC手
CROSSDOWN(C,LL)&&ISLASTBK=0&&ISLASTSK=0&&BARPOS>=26,SK(TC); //最新價跌破20周期的最低值,首次賣出開倉,手?jǐn)?shù)為TC手
C>=IF(ISLASTSP,REFSIG_PRICE(SP,1),BKPRICE)+0.5*ATR&&(ISLASTBK||ISLASTSP)&&BKVOL>0,BK(TC);//價格在上次開平倉的基礎(chǔ)上上漲0.5倍ATR,買入加倉TC手
C<=IF(ISLASTBP,REFSIG_PRICE(BP,1),SKPRICE)-0.5*ATR&&(ISLASTSK||ISLASTBP)&&SKVOL>0,SK(TC);//價格在上次開平倉的基礎(chǔ)上下跌0.5倍AT,賣出加倉TC手
C<=(IF(ISLASTSP,REFSIG_PRICE(SP,1),BKPRICE)-0.5*ATR)&&BKVOL>0,SP(MIN(TC,BKVOL));//最新價小于開平倉價減去0.5倍的ATR,止損平倉
C>=(IF(ISLASTBP,REFSIG_PRICE(BP,1),SKPRICE)+0.5*ATR)&&SKVOL>0,BP(MIN(TC,SKVOL)); //最新價大于開平倉價加上0.5倍的ATR,止損平倉
TRADE_AGAIN(10);