欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 解决python编程代码冗长的几点心得

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2120人关注过本帖树形打印复制链接

主题:解决python编程代码冗长的几点心得

帅哥哟,离线,有人找我吗?
滚雪球
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:520 积分:0 威望:0 精华:0 注册:2013/10/20 14:07:21
解决python编程代码冗长的几点心得  发帖心情 Post By:2019/6/30 15:39:29 [显示全部帖子]

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代码下即使函数无参数也要加上括号,否则只代表执行这个函数,但并不会等待返回值,会导致返回值类型错误

 回到顶部