编码帮助 - 页 469

 

你好,交易员。

谁能帮帮我,知道这两个.ex4文件中的指标是什么?

最好的问候,oink!

附加的文件:
 
oink!:
你好,交易员。

谁能帮帮我,知道这两个.ex4文件中的指标是什么?

最好的问候,oink!

警报信号是一个简单的之字形,用于显示箭头。

附加的文件:
zz.gif  76 kb
 

谢谢 mladen,我从大约10000个Indikators中知道你的名字!;-)

然后我在谷歌上搜索人字形+箭头的指标

另一个是未定义的?

最好的问候,oink!

 
oink!:
Thanksmladen,我从大约10000个指标中知道你的名字!;-)

然后我在谷歌上搜索 "之字形+箭头 "指标。

另一个是未定义的?

最好的问候,Oink!

坦率地说,我无法识别另一个。抱歉

 

你好。

我不明白为什么这个EA不工作,编译正常,日志和专家标签中没有任何内容,但没有任何交易。

谢谢你。

外置 int magicNum=200;

外置双数TakeProfit=50。

外部双数 Lots = 0.01;

外置双倍追踪止损=30。

//extern double MACDOpenLevel=3;

//extern double MACDCloseLevel=2;

外置双MATrendPeriod=5。

开始()

{

双重MaCurrent,MaPrevious,MavPrevious。

double close=iClose(Symbol(),0,0);

double vclose=iClose(Symbol(),0,1);

双重vvclose=iClose(Symbol(),0,2)。

// double MacdCurrent, MacdPrevious, SignalCurrent;

// double SignalPrevious, MaCurrent, MaPrevious;

//双倍RSIj,RSIv。

int cnt, ticket, total;

// 初始数据检查

// 确保专家是在一个正常的图表中工作的,并且用户没有对图表进行修改,这是非常重要的。

// 图表,并且用户在设置外部变量时没有犯任何错误。

// 变量(Lots, StopLoss, TakeProfit,

// 在我们的案例中,我们检查TakeProfit。

// 在我们的案例中,我们在少于100条的图表中检查获利

如果(Bars<100)

{

Print("小于100的条数")。

return(0);

}

如果(TakeProfit<10)

{

Print("TakeProfit小于10")。

return(0); // 检查TakeProfit

}

// 为了简化编码和加快访问速度

// 数据被放入内部变量

// 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_SMA,PRICE_CLOSE,0)。

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,1)。

MavPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,2)。

double PlusHaut =High;

double PlusBas =Low;

double TiersHaut =PlusBas +((PlusHaut-PlusBas)*0.66);

双重TiersBas =PlusBas +((PlusHaut-PlusBas)*0.33)。

// RSIj= iRSI(NULL,0,9,PRICE_CLOSE,0)。

// RSIv= iRSI(NULL,0,9,PRICE_CLOSE,1)。

total=OrdersTotal();

if(total<1)

{ // 没有确定的开仓订单

如果(AccountFreeMargin()<(1000*Lots))

{

Print("我们没有钱。Free Margin = ", AccountFreeMargin())。

return(0);

}

// 检查多头头寸(BUY)的可能性

如果

// (RSIv30)

( MaCurrent >MaPrevious)

// && (MaPreviousvclose || vclose>vvclose))

// (MacdCurrentSignalCurrent && MacdPrevious<SignalPrevious &&)

// MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "MA",magicNum,0,Green) 。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());

}

否则 Print("打开BUY订单错误。",GetLastError())。

return(0);

}

// 检查空头头寸(SELL)的可能性

// 如果(RSIv>70 && RSIj<70)

如果 ( MaCurrent <MaPrevious)

// && (MaPrevious>MavPrevious) && (close<vclose || vclose<vvclose))

// (MacdCurrent>0 && MacdCurrentSignalPrevious &&)

// MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "MA",magicNum,0,Red)。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("Sell order opened : ",OrderOpenPrice());

}

否则 Print("打开卖出订单错误。",GetLastError())。

return(0);

}

return(0);

}

// 正确地进入市场是很重要的。

// 但更重要的是正确退出......

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。

if(OrderType()<=OP_SELL && // 检查开仓位置

OrderSymbol()==Symbol()) //检查符号

{

如果(OrderType()==OP_BUY) // 多头头寸已经建立

{

//是否应该平仓?

// if(MacdCurrent>0 && MacdCurrentSignalPrevious &&)

// MacdCurrent>(MACDCloseLevel*Point))

// 如果(RSIv>70 && RSIj<70)

如果 ( MaCurrent <MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // 平仓

return(0); // 退出

}

// 检查拖曳止损

如果(TrailingStop>0)

{

如果(Bid-OrderOpenPrice()>Point*TrailingStop)

{

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

{

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

返回(0)。

}

}

}

}

否则 // 转入空头头寸

{

//应该平仓吗?

// if(MacdCurrentSignalCurrent &&)

// MacdPrevious(MACDCloseLevel*Point))

如果

// (RSIv30)

( MaCurrent >MaPrevious)

{

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

return(0); // 退出

}

// 检查拖曳止损

如果(TrailingStop>0)

{

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

{

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

{

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

返回(0)。

}

}

}

}

}

}

return(0);

}

//结束。

 
Jovager:
你好。

我不明白为什么这个EA不工作,编译正常,日志和专家标签中没有任何内容,但没有任何交易。

谢谢你。

外置 int magicNum=200;

外置双数TakeProfit=50。

外部双数 Lots = 0.01;

外置双倍追踪止损=30。

//extern double MACDOpenLevel=3;

//extern double MACDCloseLevel=2;

外置双MATrendPeriod=5。

开始()

{

双重MaCurrent,MaPrevious,MavPrevious。

double close=iClose(Symbol(),0,0);

double vclose=iClose(Symbol(),0,1);

双重vvclose=iClose(Symbol(),0,2)。

// double MacdCurrent, MacdPrevious, SignalCurrent;

// double SignalPrevious, MaCurrent, MaPrevious;

//双倍RSIj,RSIv。

int cnt, ticket, total;

// 初始数据检查

// 确保专家是在一个正常的图表中工作的,并且用户没有对图表进行修改,这是非常重要的。

// 图表,并且用户在设置外部变量时没有犯任何错误。

// 变量(Lots, StopLoss, TakeProfit,

// 在我们的案例中,我们检查TakeProfit。

// 在我们的案例中,我们在少于100条的图表中检查获利

如果(Bars<100)

{

Print("小于100的条数")。

return(0);

}

如果(TakeProfit<10)

{

Print("TakeProfit小于10")。

return(0); // 检查TakeProfit

}

// 为了简化编码和加快访问速度

// 数据被放入内部变量

// 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_SMA,PRICE_CLOSE,0)。

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,1)。

MavPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,2)。

double PlusHaut =High;

double PlusBas =Low;

double TiersHaut =PlusBas +((PlusHaut-PlusBas)*0.66);

双重TiersBas =PlusBas +((PlusHaut-PlusBas)*0.33)。

// RSIj= iRSI(NULL,0,9,PRICE_CLOSE,0)。

// RSIv= iRSI(NULL,0,9,PRICE_CLOSE,1)。

total=OrdersTotal();

if(total<1)

{ // 没有确定的开仓订单

如果(AccountFreeMargin()<(1000*Lots))

{

Print("我们没有钱。Free Margin = ", AccountFreeMargin())。

return(0);

}

// 检查多头头寸(BUY)的可能性

如果

// (RSIv30)

( MaCurrent >MaPrevious)

// && (MaPreviousvclose || vclose>vvclose))

// (MacdCurrentSignalCurrent && MacdPrevious<SignalPrevious &&)

// MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "MA",magicNum,0,Green) 。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());

}

否则 Print("打开BUY订单错误。",GetLastError())。

return(0);

}

// 检查空头头寸(卖出)的可能性

// 如果(RSIv>70 && RSIj<70)

如果 ( MaCurrent <MaPrevious)

// && (MaPrevious>MavPrevious) && (close<vclose || vclose<vvclose))

// (MacdCurrent>0 && MacdCurrentSignalPrevious &&)

// MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "MA",magicNum,0,Red)。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("Sell order opened : ",OrderOpenPrice());

}

否则 Print("打开卖出订单错误。",GetLastError())。

return(0);

}

return(0);

}

// 正确地进入市场是很重要的。

// 但更重要的是正确退出......

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。

if(OrderType()<=OP_SELL && // 检查开仓位置

OrderSymbol()==Symbol()) //检查符号

{

如果(OrderType()==OP_BUY) // 多头头寸已经建立

{

//是否应该平仓?

// if(MacdCurrent>0 && MacdCurrentSignalPrevious &&)

// MacdCurrent>(MACDCloseLevel*Point))

// 如果(RSIv>70 && RSIj<70)

如果 ( MaCurrent <MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // 平仓

return(0); // 退出

}

// 检查拖曳止损

如果(TrailingStop>0)

{

如果(Bid-OrderOpenPrice()>Point*TrailingStop)

{

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

{

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

返回(0)。

}

}

}

}

否则 // 转入空头头寸

{

//应该平仓吗?

// if(MacdCurrentSignalCurrent &&)

// MacdPrevious(MACDCloseLevel*Point))

如果

// (RSIv30)

( MaCurrent >MaPrevious)

{

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

return(0); // 退出

}

// 检查拖曳止损

如果(TrailingStop>0)

{

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

{

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

{

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

返回(0)。

}

}

}

}

}

}

return(0);

}

//结束。

在我后面的测试中,它是有效的。

附加的文件:
jo.gif  90 kb
 

你好mladen。

我想对我的profitOrder进行部分出售,其值与我的变量 "LossValue "相同。

我试图通过以下步骤来计算手数。

-从profitOrder中读出实际利润

-计算ProfitPerLotstep

-计算LossValue/ProfitPerLotstep,将手数结果取整。

-但如果我卖出这个手数,利润值就太小了(我想是因为点差)。

正确的计算方式是什么?

 

这里有一个额外的问题。

如果我做了部分平仓,那么剩下的头寸就会被经纪人自动打开。之前我给头寸做了注释,以区别该头寸。现在我怎样才能识别它呢?

 
sunshineh:
这里有一个额外的问题,如果我做了部分平仓,那么剩余的头寸就会被经纪商自动打开。之前我给头寸做了注释,以区别该头寸。现在我怎样才能识别它?

sunshineh

你不能做任何事情

只有经纪人可以改变订单的评论栏。也许经纪人会改变评论的方式,如 "从nnnn",其中nnnn是以前的票号,但在大多数情况下,他们不会这样做,所以你没有解决方案,在这样的情况下,可以唯一地识别以前的订单。

 

谢谢mladen!你有办法解决我之前的帖子中提到的根据定义的值(如100欧元)计算手数的问题吗?