javascript转换成python

新手上路,请多包涵

自己尝试用python转换javascript的代码,只可惜,技术太差搞不来,请大牛帮我转换一下。

这是javasript写的原代码地址链接描述

这下面是我用python尝试更改的代码出错了,请各大牛帮我更改一下,有错的代码。

# // 参数变量 (待填写)
# 少写交易对
UsedRatio = 0.5
ContractType = "rb1710";
# // 全局变量 (待填写)
Interval = 500;        #// 轮询时间 , 毫秒  , 500 毫秒 = 0.5 秒
Balance_Unit = 0
ContractTypeInfo = null;  #// 合约信息
initAccount = null;       #// 初始账户信息
LONG = 1;
SHORT = 2;

# // 功能函数 (待填写)
def loop():            #// 主循环函数



def CheckBalance_Unit(Direction):
    ContractTypeInfo = exchange.SetContractType(ContractType);  #自定义变量,获取交易对的信息
    Log("交易对信息:", ContractTypeInfo);
    Balance_Unit = _N(initAccount.Balance * UsedRatio / 10, 2);
    Log("账户信息:", initAccount, "资金分配 10份,一份为:", Balance_Unit);

    ticker = _C(exchange.GetTicker);  #重复获取最新行情信息,到有返回有用信用否则重复
    OneContractMargin = ContractTypeInfo.VolumeMultiple * ticker.Last * (ContractTypeInfo.LongMarginRatio if Direction == LONG  else  ContractTypeInfo.ShortMarginRatio);  #计算买一次加手续费要多少钱
    if(Balance_Unit < OneContractMargin * 0.2):
        throw ("最新价格:" + ticker.Last + "手续费0.02" + " ,资金可用部分的10分之一 不足 下" + ("买单" if Direction == LONG else "卖单") + "1次手续费," + "1次:" + OneContractMargin);
    else:
        Log("最新价格:" + ticker.Last + "调整系数1.2" + "1份资金 可下:", "买单" if Direction == LONG else "卖单", (Balance_Unit / OneContractMargin));

    nowAccount = _C(exchange.GetAccount);
    if(nowAccount.Balance < Balance_Unit):
        throw("当前账户资金已小于初始资金可用部分的十分之一。当前资金:" + nowAccount.Balance + ", 初始资金可用部分的十分之一为:" + Balance_Unit);
    else :
        if(nowAccount.Balance < OneContractMargin * 0.2):
            
            Log ("资金不足:" + JSON.stringify(nowAccount) + ", 系数1.2,1手合约保证金:" + OneContractMargin);



# // 入口函数 main
def main():
    # // 程序的初始化工作 (待填写)
    while True:
        if exchange.IO("status") == true:
            if initAccount = exchange.GetAccount() else == null
                break
            initAccount = exchange.GetAccount() == null

            LogStatus("等待交易时间获取账户信息初始化!" + "时间:", new.Date());
            Sleep(Interval);
    CheckBalance_Unit(LONG);
    CheckBalance_Unit(SHORT);

    # // 主循环, 程序完成初始化后在此 循环执行,直到手动关闭。
    LoginState = null;   #值为空
    nowTimeStamp = 0;     #时间为空
    while True:
        nowTimeStamp = Record().Time();#更新时间,时间对象
        if(exchange.IO("status") == true) : #服务器连接状态, 近回就是连接上了
            LoginState = true; #更新状态,已经连接
            loop();#连接成功就可以执行
        else: #没有连接就运行到这
            LoginState = false;

        LogStatus("时间:", _D(nowTimeStamp), LoginState ,"已连接服务器","未连接服务器!")   #/*, 待显示的一些信息可以写在此处,如账户信息,实时行情,程序状态*/
    Sleep(Interval);     #//  暂停 0.5 秒, 避免轮询频率过高,访问交易所服务器过于频繁导致问题。

    Log("程序退出!");
阅读 2.6k
1 个回答
import datetime

# 参数变量 (待填写)
ContractType = "rb1710"  # 标的物合约代码   ,螺纹钢 1710 合约 目前主力合约
UsedRatio = 0.5
# 全局变量 (待填写)
Interval = 500;           # 轮询时间 , 毫秒  , 500 毫秒 = 0.5 秒
Balance_Unit = 0
ContractTypeInfo = None  # 合约信息
initAccount = None       # 初始账户信息
LONG = 1
SHORT = 2
# 功能函数 (待填写)
def loop():              # 主循环函数
    pass


def CheckBalance_Unit(Direction):
    global ContractType,UsedRatio,Interval,Balance_Unit,ContractTypeInfo,initAccount,LONG,SHORT
    ContractTypeInfo = exchange.SetContractType(ContractType)
    Log("标的物合约信息:", ContractTypeInfo)
    Balance_Unit = _N(initAccount.Balance * UsedRatio / 10, 2)
    Log("账户信息:", initAccount, "资金分配 10份,一份为:", Balance_Unit)

    ticker = _C(exchange.GetTicker)
    OneContractMargin = ContractTypeInfo.VolumeMultiple * ticker.Last * (ContractTypeInfo.LongMarginRatio if Direction == LONG else ContractTypeInfo.ShortMarginRatio)
    if Balance_Unit < OneContractMargin * 1.2:
        Log("最新价格:" + ticker.Last + "调整系数1.2" + " ,资金可用部分的10分之一 不足 开" + ("多" if Direction == LONG else "空") + "1手合约," + "1手合约需:" + OneContractMargin)
    else:
        Log("最新价格:" + ticker.Last + "调整系数1.2" + "1份资金 可开:", "多" if Direction == LONG else "空", _N(Balance_Unit / OneContractMargin, 0));

    nowAccount = _C(exchange.GetAccount);
    if nowAccount.Balance < Balance_Unit:
        Log("当前账户资金已小于初始资金可用部分的十分之一。当前资金:" + nowAccount.Balance + ", 初始资金可用部分的十分之一为:" + Balance_Unit)
    elif nowAccount.Balance < OneContractMargin * 1.2:
        Log("资金不足:" + JSON.stringify(nowAccount) + ", 系数1.2,1手合约保证金:" + OneContractMargin)

# 入口函数 main 
def main():
    # 程序的初始化工作 (待填写)
    global ContractType,UsedRatio,Interval,Balance_Unit,ContractTypeInfo,initAccount,LONG,SHORT
    while True:
        initAccount = exchange.GetAccount()
        if exchange.IO("status") and initAccount is not None:
            break
        LogStatus("等待交易时间获取账户信息初始化!" + "时间:", datetime.datetime.now().strftime('%Y-%m-%d'))
        Sleep(Interval)
    CheckBalance_Unit(LONG)
    CheckBalance_Unit(SHORT)
    
    # 主循环, 程序完成初始化后在此 循环执行,直到手动关闭。
    LoginState = None
    nowTimeStamp = 0
    while True:
        nowTimeStamp = datetime.datetime.now();
        if exchange.IO("status"):
            LoginState = True
            loop()
        else:
            LoginState = false
        LogStatus("时间:", _D(nowTimeStamp),"已连接服务器" if LoginState else "未连接服务器!")#, 待显示的一些信息可以写在此处,如账户信息,实时行情,程序状态
        Sleep(Interval)     #  暂停 0.5 秒, 避免轮询频率过高,访问交易所服务器过于频繁导致问题。


def onexit():
    # 做一些在程序停止时的 收尾工作。(待填写)
    
    Log("程序退出!")
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题