如何编码? - 页 170

 
Roger09:
请看

double NormalizeDouble( double value, int digits)

如果你把digits=2,你可以看到你想要的东西。

你好。

我想我说得不是很清楚。比如说。

- 如果当前价格是1.3756,代码应该返回56

- 如果当前价格是99.22,代码应该返回22

- 如果当前价格是1.4499,代码应返回99

基本上,我想返回最后两位数的值,不管报价是小数点后4位还是2位。

NomalizeDouble只能将价格四舍五入 到指定的数字位置。

有没有人有什么想法?

 
musical:
嗨。

我想我说得不是很清楚。比如说。

- 如果当前价格是1.3756,代码应该返回56

- 如果当前价格是99.22,代码应该返回22

- 如果当前价格是1.4499,代码应返回99

基本上,我想返回最后两位数的值,不管报价是小数点后4位还是2位。

NomalizeDouble只能将价格四舍五入到指定的数字位置。

有没有人有什么想法?

解释一下

double lasttwonumbers=(Bid-MathFloor(Bid/(Point*100))*Point*100)/Point。

 
1Dave7:
我如何创建一个EA,如果SL是10点或更大,它将关闭来自多个EA的任何开票订单?

戴夫

<<<

Myfxidea是蜡烛图服务,提供MT4的专家顾问。

 
Roger09:
双重lasttwonumbers=(Bid-MathFloor(Bid/(Point*100))*Point*100)/Point。

运作得很好。谢谢你的帮助

 

关于追踪止损/1风险或头寸M的帮助

大家好。

我曾试图在论坛上寻找解决我的问题的方法。

在我的EA的开始。

//---- buy conditions

if(Ask > mybuyconditions)

{

ticket=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,Bid-(Ask-lowestof10bars),((BBupper-BBlower)/(Ask-lowestof10bars))*1000,"Einstieg 1",magic+1,0,Green);

}

//---- sell conditions

if(Bid < mysellconditions)

{

ticket=OrderSend(Symbol(),OP_SELL,LotsShort(),Bid,Spread,Ask+(highestof10bars-Bid),((BBupper-BBlower)/(highestof10bars-Bid))/100,"Einstieg -1",magic-1,0,Red);

}

//----[/CODE]

Stopploss: its easy 10 bars hi/lo

Takeprofit: here i write my formula for my Trailingstop, and that is:

Take the differenz of BBupper - BBlower at the order open time. Then divide by StopLoss in Pips and you have an Factor. Then take the actual BB differenz and divide it by this Faktor. NOW WE HAVE OUR VOLA BB TRAILINGSTOPP!!!!!

SO, my big problem is now to save this FAKTOR!!!! I saved it in th Takeprofit of Ordersend, it works but it is not right!!!!!

And know the 2te Question:

Position Management:

so my order is open and i have my trailing stopp that trails : So and now if the trailingstop is > orderopenprice send next ORDER!!! It's logical because so i can always sicure to risk just my 1 R Risk.

.... if Trailingstopp is > orderopenprice of secondOrder send 3te order.

HERE MY EXAMPLES:

for(int i = (OrdersTotal()-1); i >= 0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+1)

if(OrderStopLoss()< Bid-(oben-unten)/(OrderTakeProfit()/1000))

{

OrderModify(OrderTicket(),OrderOpenPrice(),High-(oben-unten)/(OrderTakeProfit()/1000),OrderTakeProfit(),0,Indigo);

return;

}

if(OrderStopLoss() > OrderOpenPrice() && CalculateCurrentOrders(Symbol()) == 1)

{

ticket1=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,Bid-(Ask-Low),((oben-unten)/(Ask-Low))*1000,"Einstieg 2",magic+2,0,Green);

return;

}

}

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+2 && CalculateCurrentAfterOrders(Symbol()) <= 1)

{

if(OrderStopLoss()<Bid-(oben-unten)/(OrderTakeProfit()/1000))

{

OrderModify(OrderTicket(),OrderOpenPrice(),High-(oben-unten)/(OrderTakeProfit()/1000),OrderTakeProfit(),0,Indigo);

return;

}

if(OrderStopLoss() > OrderOpenPrice() && CalculateCurrentOrders(Symbol()) == 2)

{

ticket2=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,Bid-(Ask-Low),((oben-unten)/(Ask-Low))*1000,"Einstieg 3",magic+3,0,Green);

return;

}

}

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+3 && CalculateCurrentAfterOrders(Symbol()) <= 2)

{

if(OrderStopLoss()< Bid-(oben-unten)/(OrderTakeProfit()/1000))

{

OrderModify(OrderTicket(),OrderOpenPrice(),High-(oben-unten)/(OrderTakeProfit()/1000),OrderTakeProfit(),0,Indigo);

return;

}

}

}

}

[CODE] if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+1)

{

{

OrderModify(OrderTicket(),OrderOpenPrice(),High-(oben-unten)/(OrderTakeProfit()/1000),OrderTakeProfit(),0,Indigo);

return;

}

if(OrderStopLoss() >= OrderOpenPrice() && CalculateCurrentOrders(Symbol()) == 1)

{

ticket1=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,0,0,"Einstieg 2",magic+2,0,Green);

return;

}

}

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+2)

{

if(OrderStopLoss() >= OrderOpenPrice() && CalculateCurrentOrders(Symbol()) == 2)

{

ticket2=OrderSend(Symbol(),OP_BUY,LotsLong(),Ask,Spread,0,0,"Einstieg 3",magic+3,0,Green);

return;

}

}

}

{

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+2)

{

if(CalculateCurrentOrders(Symbol()) == 0)

{

OrderClose(ticket1,OrderLots(),Ask,Spread,Red); return;

}

}

}

if(OrderType()==OP_BUY && OrderMagicNumber() == magic+3)

{

OrderClose(i,OrderLots(),Ask,Spread,Red); return;

}

我希望有人能帮助我解决这个问题!!!!!谢谢大家。

 

添加代码 当头寸与你的 "x "点相反时,用fixedtpsl添加额外的手数

我做了很多研究,我发现在我的EA中添加这个功能 可能是好的

当头寸对你不利,增加额外的手数"0.1",并输入自己的TP和SL。

有可能实现吗?

另外,这个EA非常好,但它只开仓买入。

也许可以增加 "卖出 "逻辑

请帮助我

附加的文件:
_v1.2.mq4  6 kb
 

需要帮助解决一个编程问题

如果你把EachTickMode设置为false,你怎么能让Metatrader 4在同一个条形上退出上一个头寸并打开新的头寸?当你把EachTickMode设置为True时,它会自动这样做,但当你把它设置为False时,它会在一个柱状图上关闭前一个头寸,然后等待下一个柱状图来打开新的头寸。我使用的是

H4时间框架,在信号发出后再等4个小时才开新仓是不可接受的。我的系统对使用 EachTickMode=True 太敏感了。如果有人能在这方面给我任何帮助,我将不胜感激。

 

需要帮助以克服Ordersend错误130

下面是我的买入功能。如果我把变量order_type 设置为1(市场订单),它就会工作,所以我知道我的止损和止盈功能在工作。问题肯定出在op_buylimit订单的价格确定上。我试图通过减少Ask的长度(pct_of_length)的百分比来计算我的订单价格(在bar 1)。我已经尝试了一系列的编码变化(有些包括NormalizeDouble),但我不能超越错误130。谁能帮帮我?顺便说一下,我正在使用IBFX。

谢谢你的帮助。

bool place_buy_order() {

int ticket, length_in_pips, offset_in_pips;

double buy_limit_price;

// pct_of_length是一个外部整数,目前设置为10

if ( order_type == 2 && pct_of_length > 0 )

{

length_in_pips = MathAbs(High[1]-Low[1]) * MathPow(10,Digits) 。

offset_in_pips = MathRound(length_in_pips * (pct_of_length/100)) 。

buy_limit_price = Ask - offset_in_pips * Point;

ticket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize(),buy_limit_price,0,stoploss("b",buy_limit_price),takeprofit("b",buy_limit_price),",MAGICMA,0,Blue) 。

}

否则

// 市场订单

ticket = OrderSend(Symbol(),OP_BUY,LotSize(),Ask,Slippage,stoploss("b",Ask),takeprofit("b",Ask),"",MAGICMA,0,Blue) 。

if ( ticket == -1 ) return(false); else return(true);

}

 

你是否试着打印出各种变量,如TP、SL等,看看它们是否被正确设置?这可能会给你一个问题所在的线索。

拉克斯

 
stocktrader24202:
如果你把EachTickMode设置为false,你怎么能让Metatrader 4在同一个条上退出前一个头寸并打开新的头寸?当你把EachTickMode设置为True时,它会自动做到这一点,但当你把它设置为false时,它会在一个柱子上关闭前一个头寸,然后等待下一个柱子来打开新的头寸。我使用的是H4时间框架,在信号发出后再等4个小时才开新仓是不可接受的。我的系统对使用 EachTickMode=True 太敏感了。如果有人能在这方面给我任何帮助,我将不胜感激。

EachTickMode是一个变量,EA的原始编码者专门包括了这个变量,所以你可以选择在同一根蜡烛上开仓或在下一个蜡烛上开仓。

这听起来像是EA在做它被设计出来的事情,所以我不确定你的问题是什么。

你说当你把变量设置为 "真 "时,它就能按你的要求工作,那么问题出在哪里?只要把变量设置为 "真 "就可以了。

拉克斯