关于 tradIngview pine语言的一些要注意的地方,以及常用api

1 篇文章 0 订阅
1 篇文章 0 订阅

process_orders_on_close

当设置为 true 时 , 会在信号出来后立即执行开关单. 到 false 时,会在信号出来的下一个k线开关单(价格是会在 开盘价 左右 浮动

strategy.entry

stop

在这里插入图片描述

strategy.entry函数中的stop参数实际上是用于创建一个停止限价单(Stop Limit Order),只是当设置了limit 时,停止挂单了而已, 而不是一个止损订单(Stop Loss Order)
停止限价单只在市场价格达到指定的价格时才会被触发。如果市场价格突然大幅度下跌或上涨,以至于跳过了指定价格,那么停止限价单将不会被激活。因此,停止限价单并不能像止损订单那样保证您的损失不会超过指定的止损价格

注意点

当前时间是 2023.5.25, tradingview 并不支持同时持有多单跟空单, 也就是说, 开多单时假设开空单, 那这相当于自动给多单进行平仓.
这里自行验证.

在这里插入图片描述

常用方法整理

计算当前持仓持仓收益(浮动盈亏)

tradeOpenPL() =>
    sumProfit = 0.0
    for tradeNo = 0 to strategy.opentrades - 1
        sumProfit += strategy.opentrades.profit(tradeNo)
    result = sumProfit

获取某个订单 id 的浮动盈亏

getProfitById(id) =>
    float profit = 0
    for i = 0 to strategy.opentrades - 1
        if strategy.opentrades.entry_id(i) == id
            profit := profit + strategy.opentrades.profit(i) //一个id 可能有多个 交易编号
    profit

获取开仓均价(根据id)

avgOpenPositionPrice(direction) =>
    float sumOpenPositionPrice = 0.0
    float trade_sum = 0
    for tradeNo = 0 to strategy.opentrades - 1
        if str.contains(strategy.opentrades.entry_id(tradeNo) , direction) 
            sumOpenPositionPrice += strategy.opentrades.entry_price(tradeNo) * strategy.opentrades.size(tradeNo)
            trade_sum += strategy.opentrades.size(tradeNo)
    result = trade_sum == 0 ? 0 : nz(sumOpenPositionPrice / trade_sum)
    plot(avgOpenPositionPrice("long")) //假设所有的自定义id 命名 都含有 "long"字符

获取总持仓量

getPositionSize() => 
    float trade_sum_ = 0
    for tradeNo = 0 to strategy.opentrades - 1
        trade_sum_ += strategy.opentrades.size(tradeNo)
    trade_sum_

我可以写tradingview策略,pine 语言

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我并不具备编写Pine语言的能力,但是我可以提供一些基本的MartinGale策略思路指导。以下是一个简单的MartinGale策略的示例: ``` //@version=4 strategy("MartinGale Strategy", overlay=true) // 定义交易量和初始交易数 lot_size = input(0.1, title="Lot Size") initial_trades = input(3, title="Initial Trades") // 计算买入和卖出价格 buy_price = close + syminfo.mintick sell_price = close - syminfo.mintick // 定义初始交易数量和交易方向 trade_size = lot_size * pow(2, initial_trades) trade_dir = 1 // 定义止损和止盈 stop_loss = input(50, title="Stop Loss") take_profit = input(50, title="Take Profit") // 定义交易函数 make_trade() => strategy.entry("Trade", strategy.long, size=trade_size, when=trade_dir > 0, limit=buy_price, stop=stop_loss) strategy.entry("Trade", strategy.short, size=trade_size, when=trade_dir < 0, limit=sell_price, stop=stop_loss) trade_dir := -trade_dir trade_size := trade_size * 2 // 计算交易信号 if strategy.position_size == 0 make_trade() else if strategy.position_size > 0 and strategy.position_avg_price - close >= take_profit * syminfo.mintick strategy.close_all() else if strategy.position_size < 0 and close - strategy.position_avg_price >= take_profit * syminfo.mintick strategy.close_all() else if strategy.position_size > 0 and close - strategy.position_avg_price <= -stop_loss * syminfo.mintick make_trade() else if strategy.position_size < 0 and strategy.position_avg_price - close <= -stop_loss * syminfo.mintick make_trade() ``` 这个示例中,我们采用了一个简单的MartinGale策略,它会根据初始交易数量和交易方向进行交易,同时在每次交易后调整交易量。此外,我们还定义了止损和止盈,以控制风险。请注意,这个示例只是一个基本的框架,需要根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值