def get_sell_condition(symbol_value): period_value = misc.getConfigKeyValueByKeyName('config.ini', 'config', 'period_value') price_buy = float(misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'price_buy')) price_max = float(misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'price_max')) k_line = api.get_k_line(symbol_value, period_value, 11) k_line_0_close = k_line[0]['close'] price_low = price_max * (1 - down_percent) price_min = price_buy * (1 - down_percent_max) print('price_buy = %s' % price_buy) #print('price_max = %s' % price_max) #print('price_low = %s' % price_low) #print('price_min = %s' % price_min) print('close = %s' % k_line_0_close) print('percent = %.4f%%' % ((k_line_0_close / price_buy - 1) * 100)) condition1 = k_line_0_close < k_line[0]['open']#阴线 print('阴线 = %s' % condition1) if k_line_0_close > price_max: misc.setConfigKeyValue('config.ini', symbol_value, 'price_max', k_line_0_close) price_max = k_line_0_close if price_min > k_line_0_close: return True if price_low > k_line_0_close: return True else: return False
def isBuyOrSellByMa5ValueAndCloseValue(operationType, ma5Value, closeValue, fatherMa5Slope): condition1 = ma5Value < closeValue #true为买入机会,false为卖出机会 condition2 = fatherMa5Slope > 0 #当true,为上升趋势,false为下跌趋势 print('均线=', ma5Value, '\t收盘价=', closeValue, '\t趋势指导=', fatherMa5Slope, '\tcondition1=', condition1, '\tcondition2=', condition2) global buySignal global sellSignal if condition1: if operationType == 'buy': print('已买入,等待卖出机会') buySignal = 0 return 'buy', None if not condition2: print('下跌趋势不买入') buySignal = 0 return 'sell', None print('买入信号+1') buySignal = buySignal + 1 if buySignal >= buySignalMax: #买入操作 amount = misc.getConfigKeyValueByKeyName('config.ini', symbolValue, 'usdt') orderId = place(amount, 'buy-market') buySignal = 0 return 'buy', orderId else: return 'sell', None else: if operationType == 'sell': print('已卖出,等待买入机会') sellSignal = 0 return 'sell', None #卖出操作 price = getLastBuyOrderPrice() if condition2: if price > closeValue: #上升趋势,且盈利价格>市价时,不卖出 print('price=', price) print('closeValue=', closeValue) print('上升趋势,涨幅未超过1%,不卖出') sellSignal = 0 return 'buy', None print('卖出信号+1') sellSignal = sellSignal + 1 if sellSignal >= sellSignalMax: print('price=', price) print('closeValue=', closeValue) balanceStr = getBlance(coinName) pointIndex = balanceStr.index('.') amount = balanceStr[0:5 + pointIndex] orderId = place(amount, 'sell-market') sellSignal = 0 return 'sell', orderId else: return 'buy', None
def get_sell_condition(symbol_value): period_value = misc.getConfigKeyValueByKeyName('config.ini', 'config', 'period_value') k_line = api.get_k_line(symbol_value, period_value, 11) k_line_0_close = k_line[0]['close'] condition1 = k_line_0_close < k_line[0]['open'] #阴线 k_line_1_close = k_line[1]['close'] k_line_1_time = k_line[1]['id'] k_line_time = int( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'k_line_time')) x_value = (k_line_1_time - k_line_time) / 60 / 60 k_value = float( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'k_value')) b_value = float( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'b_value')) y_value = k_value * x_value + b_value if (k_line_1_close > y_value * up_point and x_value > 0): y_value_repair = y_value + (k_line_1_close - y_value) / 10 k_value_repair = (y_value_repair - b_value) / x_value print('原始k k_value=%s' % k_value) print('斜率k修正 k_value_repair=%s' % k_value_repair) misc.setConfigKeyValue('config.ini', symbol_value, 'k_value', str(k_value_repair)) #return False and condition1 k_value = float( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'k_value')) x_value = x_value + 1 y_value = k_value * x_value + b_value print('k_line_1时间 x=%s' % x_value) print('直线斜率 k=%s' % k_value) print('常数项 b=%s' % b_value) print('理想市价 y=%s' % y_value) print('实际市价 close=%s' % k_line_0_close) if (k_line_0_close < y_value * down_point): return True and condition1 else: return False and condition1
def get_condition(): operationType = misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'type') k_line = api.get_k_line(symbol_value, period_value, 8) last_close_value = k_line[0]['close'] ma_line = api.get_ma_line(k_line, 4) last_ma_value = ma_line[0] slope_list = api.get_slope_line(ma_line) print(slope_list) slope_list[0] = slope_list[0] * 1.075 print(slope_list) slope_sum = 0 for slope in slope_list: slope_sum = slope_sum + slope slope_sum = round(slope_sum, 6) slope_sum_last = slope_list[0] + slope_list[1] # + slope_list[2] slope_sum_early = slope_list[3] + slope_list[2] # + slope_list[5] condition1 = operationType == 'sell' condition2 = last_close_value > last_ma_value #true为买入机会,false为卖出机会 condition3 = slope_sum > 0 #true为斜率之和大于0,目前趋势向上,反之向下 time_value = 0.0150 condition4 = abs(slope_sum) > (float(last_close_value) * time_value ) #true为波动幅度大于市价的100.75%,波动幅度较大,非横盘震荡、谷底、山顶 condition5 = slope_sum_last > slope_sum_early #斜率后半段大于前半段 condition6 = last_close_value > k_line[0]['open'] #true收盘价大于开盘价,阳线 condition7 = slope_sum_last > 0 #后半段斜率之和为正 condition8 = slope_sum_early < 0 #前半段斜率之和为负 print('均线 = %s' % last_ma_value) print('市价 = %s' % last_close_value) print('斜率之和 = %s' % slope_sum) print('斜率之和(前半段) = %s' % slope_sum_early) print('斜率之和(后半段) = %s' % slope_sum_last) print('斜率波动幅度要求 = %s' % (last_close_value * time_value)) print('1-最后一次操作为卖出 = %s' % condition1) print('2-市价高于均线 = %s' % condition2) print('3-斜率之和大于0 = %s' % condition3) print('4-波动幅度足够大 = %s' % condition4) print('5-后半段斜率之和大于前半段三斜率之和 = %s' % condition5) print('8-前半段斜率之和小于0 = %s' % condition8) print('7-后半段斜率之和大于0 = %s' % condition7) print('6-是否阳线 = %s' % condition6) return condition1, condition2, condition3, condition4, condition5, condition6, condition7, condition8
def doOperation(operationType,ma5LastSlope,ma11LastSlope): if operationType == 'sell': if ma5LastSlope < 0 or ma11LastSlope < 0: print('条件不满足,不买入') return 10, 'sell', None #买入操作 amount=misc.getConfigKeyValueByKeyName('config.ini',symbolValue,'usdt') orderId = place(amount,'buy-market') return 180, 'buy', orderId if operationType == 'buy': if ma5LastSlope > 0: print('条件不满足,不卖出') return 180, 'buy', None #卖出操作 balanceStr=getBlance(coinName) pointIndex=balanceStr.index('.') amount=balanceStr[0:5+pointIndex] orderId = place(amount,'sell-market') return 10, 'sell', orderId
def get_buy_condition(symbol_value): period_value = misc.getConfigKeyValueByKeyName('config.ini', 'config', 'period_value') k_line = api.get_k_line(symbol_value, period_value, 8) last_close_value = k_line[0]['close'] ma_line = api.get_ma_line(k_line, 4) print(ma_line) last_ma_value = ma_line[0] slope_list = api.get_slope_line(ma_line) print(slope_list) slope_sum = 0 for slope in slope_list: slope_sum = slope_sum + slope slope_sum = round(slope_sum, 6) slope_sum_last = slope_list[0] + slope_list[1] slope_sum_early = slope_list[3] + slope_list[2] condition1 = last_close_value > last_ma_value #市价在均线之上 condition2 = last_close_value > k_line[0]['open'] #true收盘价大于开盘价,阳线 #condition3 = slope_sum_last > slope_sum_early and slope_sum_last > 0 #斜率后半段大于前半段,且大于0 condition3 = slope_list[0] > 0 print('市价在均线之上 = %s' % condition1) print('阳线 = %s' % condition2) print('斜率后半段大于前半段,且大于0 = %s' % condition3) return condition1, condition2, condition3
def main(symbol_value): print(misc.getTimeStr()) print(symbol_value) operationType = misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'type') buy_signal = int(misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'buy_signal')) sell_signal = int(misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'sell_signal')) buy_signal_max = int(misc.getConfigKeyValueByKeyName('config.ini', 'config', 'buy_signal_max')) sell_signal_max = int(misc.getConfigKeyValueByKeyName('config.ini', 'config', 'sell_signal_max')) condition = operationType == 'sell' order_id = None if condition:#买入判断 condition1, condition2, condition3 = get_buy_condition(symbol_value) if condition1 and condition2 and condition3: print('买入信号+1') buy_signal = buy_signal + 1 print('buy_signal = %s' % buy_signal) misc.setConfigKeyValue('config.ini', symbol_value, 'buy_signal', buy_signal) else: misc.setConfigKeyValue('config.ini', symbol_value, 'buy_signal', 0) else:#卖出判断 condition = get_sell_condition(symbol_value) if condition: print('卖出信号+1') sell_signal = sell_signal + 1 print('sell_signal = %s' % sell_signal) misc.setConfigKeyValue('config.ini', symbol_value, 'sell_signal', sell_signal) else: misc.setConfigKeyValue('config.ini', symbol_value, 'sell_signal', 0) if buy_signal >= buy_signal_max: #买入操作 amount = misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'money_value') #amount = api.get_balance(account_id, money_name) order_id = api.do_place(account_id, amount, symbol_value, 'buy-market') misc.setConfigKeyValue('config.ini', symbol_value, 'buy_signal', 0) if sell_signal >= sell_signal_max: #卖出操作 coin_name = misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'coin_name') amount = api.get_balance(account_id, coin_name) if coin_name == 'knc' or coin_name == 'qsp': amount = misc.get_float_str(amount,0) order_id = api.do_place(account_id, amount, symbol_value, 'sell-market') misc.setConfigKeyValue('config.ini', symbol_value, 'sell_signal', 0) if order_id: time.sleep(2) order_detail = api.get_order_detail(order_id)[0] if order_detail['type'] == 'buy-market': misc.setConfigKeyValue('config.ini', symbol_value, 'type', 'buy') misc.setConfigKeyValue('config.ini', symbol_value, 'price_buy', order_detail['price']) misc.setConfigKeyValue('config.ini', symbol_value, 'price_max', order_detail['price']) coin_value = misc.get_float_str(str(float(order_detail['filled-amount']) - float(order_detail['filled-fees']))) misc.setConfigKeyValue('config.ini', symbol_value, 'coin_value', coin_value) if order_detail['type'] == 'sell-market': order_info = api.get_order_info(order_id) misc.setConfigKeyValue('config.ini', symbol_value, 'type', 'sell') misc.setConfigKeyValue('config.ini', symbol_value, 'price_sell', order_detail['price']) money_value = misc.get_float_str(str(float(order_info['field-cash-amount']) - float(order_info['field-fees'])),6) misc.setConfigKeyValue('config.ini', symbol_value, 'money_value', money_value) '''
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Fri Nov 24 02:45:53 2017 @author: Marco """ import huo_bi_api as api from huo_bi_utils import ApiError, ApiNetworkError import misc import time from person import mailPass as mail_pass mail_host = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'mailHost') mail_user = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'mailUser') receivers = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'receivers').split(',') def get_buy_condition(symbol_value): period_value = misc.getConfigKeyValueByKeyName('config.ini', 'config', 'period_value') k_line = api.get_k_line(symbol_value, period_value, 8) last_close_value = k_line[0]['close'] ma_line = api.get_ma_line(k_line, 4) print(ma_line) last_ma_value = ma_line[0] slope_list = api.get_slope_line(ma_line) print(slope_list) slope_sum = 0 for slope in slope_list: slope_sum = slope_sum + slope slope_sum = round(slope_sum, 6)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Fri Nov 17 22:22:26 2017 @author: Marco """ import huo_bi_api as api import misc import time from person import mailPass as mail_pass mail_host = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'mailHost') mail_user = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'mailUser') receivers = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'receivers').split(',') #交易对 symbol_value = 'qspbtc' money_name = 'usdt' coin_name = 'btc' account_id = api.get_account_id() global buy_signal global sell_signal buy_signal = 0 sell_signal = 0 buy_signal_max = 4 sell_signal_max = 4 usdt = api.get_balance(account_id, 'usdt') btc = api.get_balance(account_id, 'btc')
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Nov 4 10:38:01 2017 @author: Marco """ from person import apikey, secretkey, mailPass import misc from okexSpotAPI import OkexSpot import time mailHost = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'mailHost') mailUser = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'mailUser') receivers = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'receivers').split(',') okexSpot = OkexSpot(apikey, secretkey) symbol = 'btc_usdt' highValue = misc.getConfigKeyValueByKeyName('config.ini', 'ticker', 'high') while True: ticker = okexSpot.ticker(symbol) high = ticker['ticker']['high'] print(ticker) if high > highValue: content = '<html>' content += '<p>返回数据时服务器时间:%s</p>' % misc.getTimeStrWithUnixTimestamp( int(ticker['date']))
def doBuy(): #买入操作 amount = misc.getConfigKeyValueByKeyName('config.ini', symbolValue, 'usdt') orderId = place(amount, 'buy-market') return 'buy', orderId
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Nov 16 00:46:24 2017 @author: Marco """ from person import API_KEY, API_SECRET, mailPass import huoBiApi, misc import time mailHost = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'mailHost') mailUser = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'mailUser') receivers = misc.getConfigKeyValueByKeyName('config.ini', 'mail', 'receivers').split(',') #交易对 symbolValue = 'bccusdt' moneyName = 'usdt' coinName = 'bcc' client = huoBiApi.ApiClient(API_KEY, API_SECRET) accs = client.get('/v1/account/accounts') accountIdValue = accs[0].id global buySignal buySignal = 0 global sellSignal sellSignal = 0 buySignalMax = 1 sellSignalMax = 1
def main(): print(misc.getTimeStr()) condition1, condition2, condition3, condition4, condition5, condition6, condition7, condition8 = get_condition( ) order_id = None global buy_signal global sell_signal if condition1 and condition2 and ( (condition3 and condition4) or (not condition4 and condition5 and condition7)) and condition6: print('买入信号+1') buy_signal = buy_signal + 1 else: buy_signal = 0 if not condition1 and not condition2 and not condition6: #(condition4 or (not condition4 and not condition5)): print('卖出信号+1') sell_signal = sell_signal + 1 else: sell_signal = 0 if buy_signal >= buy_signal_max: #买入操作 #amount = misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'usdt') amount = api.get_balance(account_id, money_name) order_id = api.do_place(account_id, amount, symbol_value, 'buy-market') buy_signal = 0 if sell_signal >= sell_signal_max: #卖出操作 amount = api.get_balance(account_id, coin_name) order_id = api.do_place(account_id, amount, symbol_value, 'sell-market') sell_signal = 0 if order_id: time.sleep(10) order_detail = api.get_order_detail(order_id)[0] if order_detail['type'] == 'buy-market': misc.setConfigKeyValue('config.ini', symbol_value, 'type', 'buy') misc.setConfigKeyValue('config.ini', symbol_value, 'price_buy', order_detail['price']) if order_detail['type'] == 'sell-market': misc.setConfigKeyValue('config.ini', symbol_value, 'type', 'sell') misc.setConfigKeyValue('config.ini', symbol_value, 'price_sell', order_detail['price']) content = '<html>' if order_detail['type'] == 'sell-market': price_buy = float( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'price_buy')) price_sell = float( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'price_sell')) content += '<p>盈亏=%.4f%%</p>' % ( (price_sell / price_buy - 1 - 0.005) * 100) content += '<p>created-at(交易时间)=%s</p>' % misc.getTimeStrWithUnixTimestamp( int(order_detail['created-at'] / 1000)) content += '<p>symbol(交易对)=%s</p>' % order_detail['symbol'] content += '<p>price(成交价格)=%s</p>' % order_detail['price'] #content+='<p>filled-amount(订单数量)=%s</p>' % order_detail['filled-amount'] #content+='<p>filled-fees(已成交手续费)=%s</p>' % order_detail['filled-fees'] content += '<p>type(订单类型(buy-market:市价买, sell-market:市价卖))=%s</p>' % order_detail[ 'type'] content += '<p>%s</p>' % str(order_detail) content += '<p>1-最后一次操作为卖出 = %s</p>' % condition1 content += '<p>2-市价高于均线 = %s</p>' % condition2 content += '<p>3-斜率之和大于0 = %s</p>' % condition3 content += '<p>4-波动幅度足够大 = %s</p>' % condition4 content += '<p>5-后半段斜率之和大于前半段三斜率之和 = %s</p>' % condition5 content += '<p>7-后半段斜率之和大于0 = %s</p>' % condition7 content += '<p>6-是否阳线 = %s</p>' % condition6 content += '<p>condition1 and condition2 and ((condition3 and condition4) or (not condition4 and condition5 and condition7)) and condition6</p>' content += '<p>not condition1 and not condition2 and not condition6</p>' content += '</html>' misc.sendEmail(mail_host, mail_user, mail_pass, receivers, '%s_%s_交易报告' % (symbol_value, order_detail['type']), content)
def main(symbol_value): print(misc.getTimeStr()) print(symbol_value) operationType = misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'type') buy_signal = int( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'buy_signal')) sell_signal = int( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'sell_signal')) buy_signal_max = int( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'buy_signal_max')) sell_signal_max = int( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'sell_signal_max')) condition = operationType == 'sell' order_id = None if condition: #买入判断 k_line_1_id, ma_line, slope_list, condition1, condition2, condition3 = get_buy_condition( symbol_value) if condition1 and condition2 and condition3: print('买入信号+1') buy_signal = buy_signal + 1 misc.setConfigKeyValue('config.ini', symbol_value, 'buy_signal', buy_signal) else: buy_signal = 0 misc.setConfigKeyValue('config.ini', symbol_value, 'buy_signal', buy_signal) else: #卖出判断 condition = get_sell_condition(symbol_value) if condition: print('卖出信号+1') sell_signal = sell_signal + 1 misc.setConfigKeyValue('config.ini', symbol_value, 'sell_signal', sell_signal) else: sell_signal = 0 misc.setConfigKeyValue('config.ini', symbol_value, 'sell_signal', sell_signal) if buy_signal >= buy_signal_max: #买入操作 amount = misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'money_value') #amount = api.get_balance(account_id, money_name) order_id = api.do_place(account_id, amount, symbol_value, 'buy-market') buy_signal = 0 misc.setConfigKeyValue('config.ini', symbol_value, 'buy_signal', buy_signal) if sell_signal >= sell_signal_max: #卖出操作 coin_name = misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'coin_name') amount = api.get_balance(account_id, coin_name) order_id = api.do_place(account_id, amount, symbol_value, 'sell-market') sell_signal = 0 misc.setConfigKeyValue('config.ini', symbol_value, 'sell_signal', sell_signal) if order_id: time.sleep(2) order_detail = api.get_order_detail(order_id)[0] if order_detail['type'] == 'buy-market': misc.setConfigKeyValue('config.ini', symbol_value, 'type', 'buy') misc.setConfigKeyValue('config.ini', symbol_value, 'price_buy', order_detail['price']) misc.setConfigKeyValue( 'config.ini', symbol_value, 'b_value', float(order_detail['price']) - ma_line[0] + ma_line[1]) misc.setConfigKeyValue('config.ini', symbol_value, 'k_value', ma_line[0] - ma_line[1]) misc.setConfigKeyValue('config.ini', symbol_value, 'k_line_time', k_line_1_id) coin_value = misc.get_float_str( str( float(order_detail['filled-amount']) - float(order_detail['filled-fees']))) misc.setConfigKeyValue('config.ini', symbol_value, 'coin_value', coin_value) if order_detail['type'] == 'sell-market': misc.setConfigKeyValue('config.ini', symbol_value, 'type', 'sell') misc.setConfigKeyValue('config.ini', symbol_value, 'price_sell', order_detail['price']) money_value = misc.get_float_str( str( float(order_detail['filled-amount']) - float(order_detail['filled-fees']))) misc.setConfigKeyValue('config.ini', symbol_value, 'money_value', money_value) content = '<html>' if order_detail['type'] == 'sell-market': price_buy = float( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'price_buy')) price_sell = float( misc.getConfigKeyValueByKeyName('config.ini', symbol_value, 'price_sell')) content += '<p>盈亏=%.4f%%</p>' % ( (price_sell / price_buy - 1 - 0.005) * 100) content += '<p>created-at(交易时间)=%s</p>' % misc.getTimeStrWithUnixTimestamp( int(order_detail['created-at'] / 1000)) content += '<p>symbol(交易对)=%s</p>' % order_detail['symbol'] content += '<p>price(成交价格)=%s</p>' % order_detail['price'] #content+='<p>filled-amount(订单数量)=%s</p>' % order_detail['filled-amount'] #content+='<p>filled-fees(已成交手续费)=%s</p>' % order_detail['filled-fees'] content += '<p>type(订单类型)=%s</p>' % order_detail['type'] content += '<p>%s</p>' % str(order_detail) content += '</html>' misc.sendEmail( mail_host, mail_user, mail_pass, receivers, '%s_%s_transaction_report' % (symbol_value, order_detail['type']), content)