如何编码? - 页 230

 

研究2010年的图表

使用你的模板来创建一些东西 -- 超过随机指数 的联盟

由于我们在早期使用了我们的随机图表 -- 它是否仍然适用于2010年的图表 -- 那些是真正的交易者,芽和你可以有他的任务 -- 我是进入非带状的勒贝斯格积分数学编程 -- 记得电影《She's Out of My League》 -- 好工作意味着好报酬 -----

阅读代码 -- -- 比2010年当前的投资风格稍逊一筹

 
scottyb:
我已经尝试了几乎所有可能的组合,我在编译时遇到了被诅咒的怪异小括号故障。我看了好几个小时,但都没能解决这个问题。我把它归结为一段代码的问题,是什么把脚本搞坏了。有谁能告诉我哪里出了问题(除了我是个白痴之外)。

空白的ScanForClosure()。

{

int cash = OrderProfit() + OrderSwap() + OrderCommission()

int MacdCurrent, MacdPrevious, SignalCurrent;

int SignalPrevious, MaCurrent, MaPrevious;

int total2 = OrdersTotal();

int numords2 = 0;

bool type = false。

int trd2 = 0;

MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)。

MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1)。

SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0)。

SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1)。

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0)。

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

ArrayResize(lastOrders,5)。

ArrayInitialize(lastOrders,0);

//

for(int cnt=0; cnt<total2; cnt++)

{

OrderSelect(cnt, SELECT_BY_POS)。

如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)。

{

如果((OrderType()==OP_BUY)&&

(MacdCurrent>0)&&

(MacdCurrent<SignalCurrent)&&

(现金>0)&&

(MacdPrevious>SignalPrevious) && MacdCurrent>(MACDCloseLevel*Point))。

{

CloseOrder(1);

}

如果((OrderType()==OP_SELL)&&

(现金>0)&& (MacdCurrent<0 ) &&

(MacdCurrent>SignalCurrent)&&

(MacdPrevious<SignalPrevious)&&

(MathAbs(MacdCurrent))>(MACDCloseLevel*Point))。

{

CloseOrder(2)。

}

}

}

}

嗨,Scotty。

我是从macd 样本中复制的

如果(OrderType()==OP_BUY)

{

if(MacdCurrent>0 && cash>0 && MacdCurrentSignalPrevious &&

MacdCurrent>(MACDCloseLevel*Point))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)。

返回(0)。

}

否则

{

if(MacdCurrent 0 &&MacdCurrent>SignalCurrent &&

MacdPrevious(MACDCloseLevel*Point))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 关闭位置

返回(0)。

}

监管

工具

 
forextrend:
为什么这段代码会出现错误的参数计数错误。

for(int i = 0;i < 3;i++)

{

kline = iStochastic(NULL,TimeFrame1, Period(), 4, 3, 3, MODE_SMA, 1, MODE_MAIN, i)。

dline = iStochastic(NULL,TimeFrame1, Period(), 4, 3, 3, MODE_SMA, 1, MODE_SIGNAL, i)。

}

应该是

int counted_bars = IndicatorCounted();

int limit,i;

if(counted_bars<0) return(-1);

如果(counted_bars>0) counted_bars--。

limit = Bars - counted_bars;

for(int i=limit; i>=0; i--)

{

kline = iStochastic(NULL,TimeFrame1, 4, 3, 3, MODE_SMA, 1, MODE_MAIN, i);

dline = iStochastic(NULL,TimeFrame1, 4, 3, 3, MODE_SMA, 1, MODE_SIGNAL, i);

关注

工具

 

谢谢工具先生,也许我把它弄得太复杂了,但它有什么问题呢? 发布的例子会不会扫描所有开放的票据? 我认为它只会扫描两个(一个买入和一个卖出),很可能每次都是同一个:/ 我对mt4编程非常陌生,但我确信会发生这种情况。

 

想通了

你盯着同一个问题连续看了10个小时也没能解决,真是不可思议。 我又看了一下。 当我醒来的时候,在5分钟内就解决了。 似乎这个MT4代码非常严格。 你似乎需要精确地编码它所寻找的东西(无论你是否可以用其他10种语言做完全相同的事情,并且可以工作)。

我已经为《魔兽世界》创建了机器人,让一个角色在游戏中自己跑来跑去,定位并杀死东西,但是当我试图在MT4中创建一个简单的买入卖出程序时,我却很难做到。

总之,我得到的教训是,要限制你在一行中使用if的内容。 希望我可以为其他一些人省去我的痛苦。

OrderSelect(cnt, SELECT_BY_POS)。

如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

{

如果(OrderType()==OP_BUY)

如果(利润>0)

如果(MacdCurrent<SignalCurrent)

如果(MacdCurrent>0)

如果(MacdPrevious>SignalPrevious)

如果(MacdCurrent>(MACDCloseLevel*Point))

{

CloseOrder(1);

}

如果(OrderType()==OP_SELL)

如果((MacdCurrent<0 ) )

如果(利润>0 )

如果(MacdCurrent>SignalCurrent)

如果(MacdPrevious<SignalPrevious)

如果(MathAbs(MacdCurrent)>(MACDCloseLevel*Point))

 

代码协助 - 分形

你好。

我在寻找一些帮助,作为我工作中的一个系统的一部分,需要做以下的代码。

有效的Long if。

(编号从最旧的到最近的1-x)

--分形指向下1比分形指向下2高

--分形上升1形成并创造了破多的可能条件,然而

--分形下跌3要高于分形下跌2

-- 这就验证了趋势的变化。价格向上突破上分 形将是一个有效的TRUE。如果一个新的、较低的上分形被形成,那就是新的突破点,除非有一个比上分形下跌更低的分形。较低的分形应该创造较高的高点。

对于空头验证来说是相反的。

干杯

亚伦

 

可以试着解释得更清楚一点

所以价格有一个上升的趋势,形成了一个上分形。价格回调,形成一个底部分形。价格继续回调,形成了另一个较低的底部分形。

然后价格上升,形成一个新的、较低的、上部分形。

价格回调,形成另一个底部分形,但这个底部分形比之前的底部分形要高。

价格突破之前的上分形,有效的突破多头条件。

PS 如果一个新的较低的上分形形成,但是底部分形继续在创造更高的高点,那么新的突破点就是最近的上分形。

PPS 如果更低的底部分形开始形成,条件将被重置,我们将继续寻找上述条件或反转条件来验证空头的突破。

干杯

亚伦

 

你到底需要什么样的编程帮助?需要对整个系统进行编程吗?

 

就那逻辑部分。

假设一个布尔,它是ValidBuy = FALSE。

如果上面的条件逻辑发生了,就把它设置为TRUE。

我确定这是一个数组,然后比较数组的值,但我对数组的编码不是很在行。

谢谢

亚伦

 

你不需要使用任何数组。只要创建一个函数,它可以找到给定分形的水平,所以你可以这样调用。

double fractal = FindFractal( 0, MODE_LOWER );[/CODE]

first parameter being number of fractal (0-last, 1-one before last, etc.) and second parameter telling if you want upper or lower fractal.

Then, you can code like this:

[CODE]double last_lower_fractal = FindFractal( 0, MODE_LOWER );

double previous_lower_fractal = FindFractal( 1, MODE_LOWER );

if( last_lower_fractal > previous_lower_fractal )

{

//we have found that most recent lower fractal is higher than its predecessor, do rest of your logic here.

}