以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  解决python编程代码冗长的几点心得  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=170725)

--  作者:滚雪球
--  发布时间:2019/6/30 15:39:29
--  解决python编程代码冗长的几点心得
1. 不要像示范代码中一样把任何全局变量都在初始化的时候放到context对象中,这样会导致你每次使用一个变量都要在前面加一个context
最后满屏幕都是context,无比的啰嗦。更好的方式是Python自带的使用全局变量的方式,在函数外定义全局变量,函数内如果不更改它的值
可以直接使用,如果需要更改,在函数内用global声明
2. 使用自定义函数,将频繁调用的代码变成读写更方便的函数名,使用这个方法也可以比较方便的从其他平台移植程序

以下是示例:

from PythonApi import *
import time

MaxPosition=10#最大持仓数量
SendOrderTime=0#发送订单的时间,用于超时撤单
ContractId=“SC1908” #合约代码

def init(context):
      pass

def handle_bar(context):
      global SendOrderTime #SendOrderTime声明全局变量以便后面更改它
      OrderNum=1 #局部变量每次买一张
      if (A_BuyPosition()<MaxPosition): #MaxPosition使用了全局变量但并不需要更改,因此直接使用不需要声明
          buy_open(ContractId, "Limit",Q_AskPrice(),OrderNum)#ContractId直接使用,对手价用Q_AskPrice()自定义函数获取
          SendOrderTime=time.time() #在全局变量中记录下单时间,要更改必须用global声明

#取得买持函数
def A_BuyPosition():
    return get_portfolio (ContractId, 2).buy_quantity
#取得卖一价函数
def Q_AskPrice():
    return get_dynainf(ContractId,34)


注意:在python代码下即使函数无参数也要加上括号,否则只代表执行这个函数,但并不会等待返回值,会导致返回值类型错误