作者rcwang (啊嘻汪)
看板Trading
标题Re: [问题] 想问一下一些语法怎麽写
时间Wed Jul 17 23:35:55 2019
嗨!很高兴你能提出问题。
考虑你提出的问题背後,你可能本身的背景
所以在此分享一些简易解决办法,应该可以暂时解决问题
(一)使用全局变数做为延迟计数
假设你的状态变数 1 = 震荡, 2 = 上, 3 = 下
然後你现在想要当「上」发生後 10 个 Bar 再做个检查
但是那时候可能已经不是「上」了
你可以先建立一个延迟计数的参数
int g_state_2_check_count = -1; // 这是状态2也就是「上」的计数
这个参数预设是 -1 ,但是当它设定成 0 的时候,会开始累加
然後你可能某个时刻条件 A, B, C 达成的时候
例如:
if(condi_A == true && condi_B == true && condi_C == false)
{
g_state_2_check_count = 0; // 原本是 -1 变成 0 开始累加
}
接着你在每一个时间间隔发生时, 累加:
if(g_state_2_check_count >= 0)
{
g_state_2_check_count = g_state_2_check_count + 1;
}
所以只要没有变成 0 ,维持在 -1 就不会累加
接着在你指定的延迟时间发生时,采取相应动作,并把记数恢复预设 -1
if(g_state_2_check_count >= 30)
{
// 在状态 2 发生後 30 个 bar 要做的事情
// ...
// ...
g_state_2_check_count = -1 ; // 恢复 -1 不再记数
}
这个方法有许多缺点,但考量你的需求可以解决,也容易理解~
(二)使用阵列(Array)
嗯... 这部分你就要使用阵列了哦
你可以在全局变数建立一个你觉得足够长的阵列,例如:
int g_state_buffer[10]; // buffer意思是缓冲区, 就是暂存的意思
除非你是要把数值写档案出来,否则尽量还是根据往回看的最大需求设定大小
接着在对应时刻把 1, 2, 3 放到阵列的第一个
if(condi_A == true ... )
{
g_state_buffer[0] = 1;
}
接着你回到整个时间开始处,在每次开始就将所有状态往後挪一格:
for(int i = 9; i >= 0; i--)
{
g_state_buffer[i] = g_state_buffer[i-1];
}
这样就能在每个时间都知道过去一段时间的指标变化罗~
希望对你有帮助~
※ 这个方法有较多复杂的副作用,无特别需求朋友就不要这样做啦
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.194.177.141 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Trading/M.1563377759.A.87D.html
1F:推 chord210: 感谢,先慢慢看 07/18 07:22
2F:推 huemeop: 专业推! 07/18 08:47
3F:推 jiyu520: 推! 07/20 09:32
4F:推 hungichen: rc大必须推 07/22 00:18
5F:嘘 yzfr6: 全域变数 09/29 22:01