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言語でAUTOFILTER;が解決されました. 全く気にしません.

言語は,この問題を回避するためにどのように設計されているのか,そして,その論理はどのようなものなのか,お尋ねください.

"JSで同じKのオンラインで2度購入や販売をしないようにするにはどうすればいいですか?"
タイムラグで解決したいのですが,完了した注文にタイムラグがないことが判明し,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)