この策略は,Mac言語の限界を考慮して,JSで再実装する必要がありました.
JSでMac言語戦略を再現して以来,多くの問題が見つかりました. リアルタイムの実行では,同じKラインで発見され,変動性のために,1〜2回の買い回りが行われます. 損失を招きます. そしてMac言語でAUTOFILTER;が解決されました. 全く気にしません.
言語は,この問題を回避するためにどのように設計されているのか,そして,その論理はどのようなものなのか,お尋ねください.
"JSで同じKのオンラインで2度購入や販売をしないようにするにはどうすればいいですか?"
タイムラグで解決したいのですが,完了した注文にタイムラグがないことが判明し,JS自在のDate.parse ((new Date (()) を使って,下記の注文の時間,未完了の注文が成功した場合,または未完了の注文が注文された場合は,どのように解決しますか? 論理的な考え方はどうですか?
还是有问题, 用下面的代码, 是可以防止同一根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线上也不会开了)
我的问题希望对后来的朋友也有所帮助.
代码如下: if (before_record_time != now_records.Time) //上一根的K线时间不等于这根K线的时间错, 则为不同的K线
{
// 这里写开平仓的业务逻辑, 就可以不在同一根K线上反复开平仓了
}
发现有更好的解决办法, 先声明一个变量, 用于存每次的下单时候的当前最新K线的时间戳 (无论做多做空开仓平仓,只要下单都存这个变量覆盖), 然后判断上一次开平仓的时间戳 不等于 现在这根最新K线的时间戳, 即可完美解决.. 之前的方法有bug, 比如第一根K线开仓了, 第二根K线暴跌, 但是不会平仓, 一定要等到第三根K线才会去平仓. 用最新的对比上一次开平仓的K线时间戳和现在最新K线的时间戳, 可以完美解决问题..
摸索了好一阵, 终于解决了, 代码如下:
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天, 返回的结果数为秒.
- 1


