如何编码? - 页 84

 

在100点上买入和卖出

Zamanib。

我理解你写的内容,但我不明白你是如何盈利收盘的。

在我看来,这像是一个对冲型EA。

forex-tsd里有几个这样的EA。

而且你不必采用马丁格尔法。

大的是

 
european:
有谁能分享一下如何以获利值关闭订单的想法/代码。

由于某些原因,OrderSend()函数中的 "TakeProfit "在MT4的空头/卖出订单中并不总是有效,尽管它在多头/买入订单中运行良好。

我写了一些代码,将订单的TakeProfit值与当前价格进行比较,但它并没有正确工作。 有什么想法吗?

欧元

多头以 "买入 "价格平仓,而空头则以 "卖出 "价格平仓。

 
Big Be:
Zamanib,

我理解你所写的,但我不明白你是如何盈利收盘的。

在我看来,这像是一个对冲型的EA。

在forex-tsd有几个这样的例子。

而且你不需要使用马丁格尔法。

大贝

我看到市场在一波一波地上升和下降,有些星期你会有两个周期的上升/下降,当它的趋势时,我有一个不同的策略。

请给我指点一下对冲交易的方法。我看到很多,但不是我想要的。

 

代码或平台问题?

ralph.ronnquist:
多头以 "买入 "价关闭,而空头以 "卖出 "价关闭。

谢谢你的回答。

由于某些原因,我的代码无法工作。

如果(OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

如果(OrderType() == OP_BUY && Close[0] >= OrderTakeProfit() CloseOrder(orderNo)。

如果(OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

如果能得到建议,我将不胜感激。

欧元

 
european:
谢谢你的回答。

由于某些原因,我的代码无法工作。

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

[/PHP]

I would be grateful for advice.

euro

对;"Close[0]"是 "买入 "价格,这不是一个OP_SELL的平仓价格。OP_SELL是针对 "卖出 "价格关闭的,这个价格比 "买入 "价格高出几个点(也就是点差)。

当你的EA运行时,"买入 "价格也可作为变量 "Bid","卖出 "价格作为变量 "Ask"。因此,代码片段最好是这样的。

[PHP]如果(OrderSelect(orderNo, SELECT_BY_TICKET)==true){

如果(OrderType() == OP_BUY && Bid >= OrderTakeProfit() CloseOrder(orderNo)。

如果(OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

 

请用代码帮助,谢谢...

你好。

我是写EA的新手,我正在尝试下面的方法,但得到一个错误 "Invalid ticket for OrderModify function",谁能看一下并提供帮助? 衷心感谢。

void ModifyHedgeSL(int SL) {

if (SL<1) return;

bool bres;

double sl,openadj;

if (lastopenbuy==1 && lastopensell==0) {openadj=Ask-Bid;} else {openadj=0;}

for (int i = 0; i < OrdersTotal(); i++) {

OrderSelect (i, SELECT_BY_POS,MODE_TRADES);

如果 ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_BUY )

{

sl = GetLastLongOpenPrice()-openadj-SL*Point;

bres = OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, White)。

如果(bres)Print("修改对冲BUY完成")。

if (!bres) Print("Error Modifying Hedge BUY order :",ErrorDescription(GetLastError())。

}

如果( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_SELL )

{

sl = GetLastShortOpenPrice()-openadj+SL*Point;

bres = OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, Gold)。

如果(bres)Print("修改对冲卖出完成")。

if (!bres) Print("Error Modifying Hedge SELLorder:",ErrorDescription(GetLastError())。

}

}

返回。

}

double GetLastLongOpenPrice() {

int ord;

double LastLongOpenPrice=0;

//----

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。

如果(OrderSymbol() == Symbol() && OrderMagicNumber() ==expertId && OrderType() == OP_BUY)

{

LastLongOpenPrice=OrderOpenPrice()。

}

}

如果(LastLongOpenPrice>0){return(LastLongOpenPrice);}

否则 {return(-1);}

}

 

当SL被击中时,如何编码买入/卖出订单

例如,如果我在164.30买入1手欧元/日元,SL在164.00。

如果SL被击中,那么我将在同样的价格,164.30,同样的SL在164,并且有更多的手,例如1.5,下另一个买单。然后,如果SL再次被击中,将放置另一个买单,以相同的价格和相同的SL买入2手。

有什么代码可以实现这一点吗?谢谢!

 
boostrade:
例如,如果我在164.30买入1手欧元/日元,SL在164.00。

如果SL被击中,那么我将在相同的价格,164.30,以相同的SL在164,并以更多的手,例如1.5,下另一个买单。然后,如果SL再次被击中,就会再下一个买单,以相同的价格和相同的SL买入2手。

有没有这方面的代码?谢谢!

请看这个关于Frank EA的主题https://www.mql5.com/en/forum

我想这就是你所需要的,或者你可以用它作为一个例子。

 

好的

newdigital:
请看这个关于Frank EA的主题https://www.mql5.com/en/forum,我 想这是你需要的,或者你可以把它作为一个例子。

非常感谢newdigital,任何问题我都会放在这里。 再次感谢。

 

TP问题

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

拉尔夫。

正如你所看到的,我调用了一个单独的函数CloseOrder(),我按照你的建议使用了'Ask'和'Bid',但问题仍然存在。

// 函数 CloseOrder **********************************************************

bool CloseOrder(int orderT) {

double sA;

如果(OrderSelect(orderT, SELECT_BY_TICKET)==true) {

如果(OrderType() == OP_BUY) sA = Bid;

否则sA = Ask。

bool bClosed = OrderClose(orderT,OrderLots(),sA,0,CLR_NONE) 。

如果(bClosed == 1) {

pTrades = 0; return(1); }}否则 return(0); }}。

否则 return(0); }}

**********************************************************

我希望它能保证一旦触及TP,交易就会被关闭,但事实并非如此,见附图,空单在104.03开仓,TP在103.79。尽管价格达到了(TP),但订单并没有关闭。

附加的文件:
tp_failed.jpg  32 kb