Devido às limitações da própria linguagem Mac, a estratégia teve que ser reimplementada em JS.
Desde a reimplementação da estratégia em linguagem Mac com o JS, muitos problemas foram encontrados, em operação em tempo real, descobriu-se que na mesma linha K, devido à volatilidade, haveria uma ou duas compras e vendas. Causando prejuízos.
Como é que a linguagem Mac foi projetada para evitar isso, e qual é a lógica geral?
Ou: Como posso usar o JS para evitar que eu faça compras e vendas duas vezes na mesma K-Online?
Se você quiser resolver o problema com um parâmetro de tempo, e descobrir que não há um parâmetro de tempo no pedido que foi executado, use o parâmetro Date.parse do JS (Date.parse ((new Date (()))) para determinar o tempo de execução do pedido. Se você encontrar um pedido que não foi executado ou um pedido que não foi executado, como resolver o problema?
还是有问题, 用下面的代码, 是可以防止同一根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


