Type/to search
0
Follow
4
Followers
Помощь: Как предотвратить постоянное размещение ордеров на покупку и продажу на одной и той же K-линии
Help
Created 2021-09-20 09:10:57  
 8
 1256

Из-за ограничений самого языка Mac, стратегию пришлось перестроить на JS.

С тех пор, как в JS была реализована стратегия на языке Mac, было обнаружено множество проблем, в реальной работе, обнаружено, что на одной и той же линии K, из-за волатильности, будут возвращаться 1-2 покупки и продажи, что приведет к убыткам.

Я бы хотел спросить, как в программировании на Mac это было бы предотвращено, и какова была бы логика этого?

Или: "Как я могу использовать JS, чтобы предотвратить повторные покупки и продажи в одном и том же месте?"
Если вы хотите решить проблему с помощью временной палочки и обнаружите, что в заказе, который был выполнен, нет временной палочки, закажите заказ с помощью JS-принадлежащего Date.parse ((new Date)) Время заказа, если вы столкнетесь с неудачным заказом или закажем невыполненный заказ, как это решить?

Related Recommendations
Comment
All comments (8)

    还是有问题, 用下面的代码, 是可以防止同一根K线上不会因为一点波动 在同一根K线上不停的买卖造成亏损. 但是又有 新问题, 就是同一根K线平多后,想立马反手做空, 它被限制了, 必须等到下一根K线才会开空仓. 或者平空后,想在同一根K线上反手做多, 也被限制了, 必须等到下一根K线开始才能开仓, 往往错过了最佳买入点.

    代码如下: if (before_record_time != now_records.Time) //上一根的K线时间不等于这根K线的时间错, 则为不同的K线
    {
    // 这里写开平仓的业务逻辑, 就可以不在同一根K线上反复开平仓了

    }

    我的解决办法如下: 之前是一个变量存储上一根的K线时间戳. 现在改成2个变量存储.
    一个做多方向的时间戳 duo_before_record_time
    一个做空方向的时间戳 kong_before_record_time
    做多的时候用这个限制一下, 同一根K线, 平仓后不开相同方向的仓
    代码如下: if (duo_before_record_time != now_records.Time) //上一根的K线时间不等于这根K线的时间错, 则为不同的K线
    {
    // 这里写开平仓的业务逻辑, 就可以不在同一根K线上反复开平仓了

    }

    做空的时候, 也限制一下, 在同一根K线上平仓后不开相同反向的仓
    if (kong_before_record_time != now_records.Time) //上一根的K线时间不等于这根K线的时间错, 则为不同的K线
    {
    // 这里写开平仓的业务逻辑, 就可以不在同一根K线上反复开平仓了

    }

    这样同一根K线在平仓后, 在符合开仓条件的情况,可以立马开相反方向的仓位. 但是不会开相同方向的仓位. (即使符合开仓条件, 在同一根K线上也不会开了)
    我的问题希望对后来的朋友也有所帮助.

    5 years ago

    工单回复你了

    5 years ago

    K线横轴是时间,应该用时间解决吧。

    5 years ago

    代码如下: if (before_record_time != now_records.Time) //上一根的K线时间不等于这根K线的时间错, 则为不同的K线
    {
    // 这里写开平仓的业务逻辑, 就可以不在同一根K线上反复开平仓了

    }

    5 years ago

    发现有更好的解决办法, 先声明一个变量, 用于存每次的下单时候的当前最新K线的时间戳 (无论做多做空开仓平仓,只要下单都存这个变量覆盖), 然后判断上一次开平仓的时间戳 不等于 现在这根最新K线的时间戳, 即可完美解决.. 之前的方法有bug, 比如第一根K线开仓了, 第二根K线暴跌, 但是不会平仓, 一定要等到第三根K线才会去平仓. 用最新的对比上一次开平仓的K线时间戳和现在最新K线的时间戳, 可以完美解决问题..

    5 years ago

    顺便说一下, 用 exchange.GetOrders().length>0 确定好了没有未成交的订单, 再存下单时间.

    5 years ago

    摸索了好一阵, 终于解决了, 代码如下:

    if ( Math.abs(before_order_time - now_records.Time)/1000 > now_period )
    //上一次下单的时间戳减去现在K线的时间戳, 除以1000是为了获得秒数, 取两者差的绝对值, 如果大于周期的秒数, 就不在同一根K线上.
    //需要自己设置变量before_order_time, 每次下单存一下下单的时间戳. before_order_time = Date.parse(new Date()); //把现在的时间戳记录一下
    //周期数的秒数,是通过 var now_period = _C(exchange.GetPeriod); // 获取当前的周期, 例如5分钟, 15分钟, 1天, 返回的结果数为秒.

    5 years ago

    应该可以通过K线数据里面的时间戳来进行拦截。判断是相同的时间戳不下单即可。

    5 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)