如何编码? - 页 118

 

为CEHansen

你好。

在你逐个取条的地方,你必须到处使用i变量而不是Current。Current是未初始化的,所以它是0。

最简单的方法是在开始的for中使用这个。

Current = i。

箭头就会出现。还有,别忘了给Sto_Lookback用一个更大的值。也许是100,1000或类似的值。

P.S 使用这样的for,从我的角度来看,这样做更好。

for (int i = Sto_Lookback; i >0; i--){

...

}

因为这是正常的 "条 "的方式,0是最后一条。这将节省你以后的一些其他麻烦。(例如--重新画图)。只是一个想法。

谢谢。

维克多

 
 

克林格成交量震荡指标

我查了一下这个,看起来是个有趣的指标。

然而,它部分依赖于成交量,这在外汇市场上并不适用。

大的是

 

订单修改错误 1

在我的回测中,我一直得到偶尔出现的 "OrderModify error1"。据我所知,这意味着没有变化,即OrderModify()参数与被修改订单的相应参数相同。

这可能是由于双重比较的问题。

问题是我如何解决这个问题?

下面是我认为造成这个问题的地方。

如果(Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。

if (SignalMail) SendMail("[信号提示]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False。

继续。

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {

如果(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red)。

if (!EachTickMode) BarCount = Bars;

继续。

}

}

}

//拖曳止损

如果(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

如果(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。

if (!EachTickMode) BarCount = Bars;

继续。

}

}

}

} else {

//关闭

//+------------------------------------------------------------------+

//| 信号开始(退出卖出)|

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| 信号结束(退出卖出)|

//+------------------------------------------------------------------+

如果(Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange)。

如果(SignalMail) SendMail("[信号警报]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False。

继续。

}

//MoveOnce

如果(MoveStopOnce && MoveStopWhenPrice > 0) {

如果(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {

如果(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

继续。

}

}

}

//拖曳止损

if(UseTrailingStop && TrailingStop > 0) {

如果((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

如果((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) 。

if (!EachTickMode) BarCount = Bars;

继续。

}

}

}

}

}

}

 

编码问题

i++或i--在编码中是什么意思?

Eg: for (int i=5; i>0;i--)

 
matrixebiz:
i++或i--在编码中是什么意思? Eg: for (int i=5; i>0;i--)

它是基于C语言的缩写,用于增加或减少一个基于数字的变量。

例如,在Visual Basic中,你必须写。

i = i + 1来增加i变量。

然而,在C语言中,你可以简单地写i++。

希望这有帮助。

捌零后

 
hiachiever:
在C语言中,它是基于数字的变量的增量或减量的简称。

例如,在Visual Basic中,你必须要写。

i = i + 1来增加i的变量。

然而,在C语言中,你可以简单地写i++。

希望这有帮助。

捌月壹日

谢谢。

所以,如果我把 if (int i=6; i>0; i++)

它将 "循环 "或继续检查 值,直到6的最大值?如果我用i--呢?请澄清一下

 
matrixebiz:
谢谢。

所以,如果我把 if (int i=6; i>0; i++)

它将 "循环 "或继续检查值,直到6的最大值? 不确定这是否正确。如果我使用i--呢?请澄清一下

Matrixebiz。

如果你想从6开始然后回到0,那么就用i--

(int i=6; i>0; i--)

这将从6开始,只要I>0,就在每个循环中递减1。

如果你想包括0,则使用i>=0。

干杯。

欢呼吧,Hiachiever

 
hiachiever:
Matrixebiz,

如果你想从6开始,然后回到0,那么使用i--

(int i=6; i>0; i--)

这将从6开始,在每个循环中递减1,只要I>0。

如果你想包括0,则使用i>=0。

欢呼吧。

洽洽

好的,所以如果我把 if (int i=6; i>0; i++)

那么它就会从6开始,然后,从1、2、3...6开始递增,对吗?

 
matrixebiz:
好的,所以如果我把if (int i=6; i>0; i++),那么它将从6开始,然后,从1、2、3...6开始递增,对吗?

如果你想做的是在6点结束,那就不太合适。

这种情况下的代码应该是

For (int i=1; i<=6; i++)

这将从1开始,在6结束,每次循环递增1。

干杯。

欢呼吧,Hiachiever