如何编码? - 页 289

 

需要帮助完成这个EA

我试图编写一个EA的代码(使用一些已经制作好的代码),它的作用如下。

  • 在一个特定的时间(本例中为23:00)打开两个挂单,一个卖出止损和一个买入止损,都有一个SL和TP。
  • 在某个时间(例如10:00)将挂单过期,在周五23:00不开任何交易。
  • 如果有两笔交易,其中一笔达到了止损点,另一笔的止损点就会增加到一定的数量(我认为订单修改可以解决这样的问题)。
  • 开启的交易在第二天 23:00前自动关闭。
  • 这个EA几乎已经完成了,我以前遇到的一些问题也得到了解决,并完成了上述大部分工作,但我仍然有以下问题,在这一点上我不知道如何进一步发展,所以如果有人能提供必要的代码,那将是非常有用的。

  • 当两笔交易打开,其中一笔达到止损时,我需要另一笔仍然打开的交易将其获利 增加一定数量。
  • 交易仍然在周五23:00开启,我不希望这样。
  • 任何在23:00之前仍未平仓的交易都应该被关闭,无论它们是亏损还是盈利。

我是一个MQL的新手,我试着四处寻找上述一些问题的解决方案,但很难找到它们。我相信这些问题可以很容易解决,不需要那么多复杂的编码。如果有人能为我提供上述任何问题的解决方案,我将再次表示感谢。

谢谢。

疯马3

附加的文件:
 

...

试试这样的方法。

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

int ticketBuy = OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Co mm,0,0,CLR_NONE);

if (ticketBuy>-1)

OrderModify(ticketBuy,OrderOpenPrice(),stopLossToUse,takeProfitToUse,0,CLR_NONE);

}

只需用你希望的值替换 stopLossToUse 和 takeLossToUse。

kasio:
朋友。

我是一个MQL4编程的新手,需要帮助将SL和TP附加到ECN经纪人的ORDERSEND上。

最初,我不明白为什么SL和TP会使我的订单出现错误,直到有人指出,必须将ORDERSEND中的StopLoss和TakeProfit字段设置为 "0",否则ECN/STP经纪商将不会执行订单。

因此,我的问题是:我怎样才能在市场上执行一个订单,然后立即(或在一两秒内)给该票据附加一个SL/TP?

下面是与我的问题相关的一段代码。

如果((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,Comm,0,0,CLR_NONE)。

TakeAction=0。

}

谁能帮我在OrderSend命令后插入代码,以便我可以在该特定票据上附加一个任意为25点的TP/SL?

如果有任何帮助,我将不胜感激。谢谢。

请注意。

卡西奥
 

帮忙!

谁能帮我使这个指标不重绘?

附加的文件:
pi_bg_v2.mq4  3 kb
 

...

这是一个反编译的代码,但无论如何,请看这个主题:https://www.mql5.com/en/forum/179650

这是另一个重新命名的太阳风,所以...

phoenix:
谁能帮我使这个指标不重绘?
 

对我发布的内容有什么想法吗?如果我是不耐烦或什么的,我很抱歉,只是想知道它是否被阅读。

谢谢。

madmax3

 

...

在你的EA中,在start()程序的开头添加类似这样的内容。
if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); } [/PHP]

在代码中加入这个。

[PHP]void CloseAll()

{

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderMagicNumber() !=MagicNumber)继续;

//

/

/

/

/

/

/

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

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

{

RefreshRates();

if (OrderType()==OP_BUY)

{ double cp = Bid; }

else { cp = Ask。}

OrderClose(OrderTicket(),OrderLots(),cp,0,Yellow);

int err=GetLastError();

if(err==4 || err==136 || err==137 || err==138 || err==146)

{

Sleep(5000); continue;

}

break;

}

break

;

}

}

}

}

这将解决你的第2点和第3点(周五的开仓订单)。

第一点的代码相当复杂 - 你可能需要重新定义该规则

madmax3:
对我发布的内容有什么想法吗?如果我是不耐烦或什么的,我很抱歉,只是想知道是否有人看了它。

谢谢。

madmax3
 

请帮助我们!错误号=4103。位置=10。无法打开文件

你好。

我是这里的新人,也是MT编程的新手。谁能帮我解决这个问题?

我得到了 "发生了一个错误。错误号=4103。位置=10(无法打开文件)的信息。"

文件被正确地保存为gif,但我得到了上述信息。问题出在哪里?

这段代码。

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates()。

if (cmd==OP_BUY) Comment (DateTimeInfo(),"\n", "OrderOpen Time:" ,TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS), " Buy:",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Comment (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell: " ,DoubleToStr(orderOpenPrice,Digits) ) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif" 。

int handle = FileOpen(filename,FILE_CSV|FILE_READ);

如果(handle<1)

{

如果(GlobalVariableGet("_MonitorScreen_ScreenShot") !=0 )

{

如果(!WindowScreenShot(filename,900,600))Print("WindowScreenShot错误。"+GetLastError())。

}

}

否则FileClose(handle)。

}

希望得到任何帮助。谢谢你。

 

...

它工作正常

该文件必须在 experts/files 子文件夹中,我以票号 0 为例,所以全文件名在我的例子中是 "EURUSD_Demo_0_Open.gif",它打开时没有问题(如果你使用 FILE_CSV 以及FILE_BIN,它也能正常工作)。因此,如果它被保存在正确的文件夹和正确的名称中,你的代码可以正常工作。

Akkinmore:
嗨。

我是这里的新人,也是MT编程的新手。谁能帮我解决这个问题?

我得到了 "发生了一个错误。错误号=4103。位置=10(无法打开文件)"的信息。

文件被正确地保存为gif,但我得到了上述信息。问题出在哪里?

这段代码。

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates()。

if (cmd==OP_BUY) Comment (DateTimeInfo(),"\n", "Order Open Time: " ,TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS), " Buy:",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Comment (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell: " ,DoubleToStr(orderOpenPrice,Digits) ) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif" 。

int handle = FileOpen(filename,FILE_CSV|FILE_READ);

如果(handle<1)

{

如果(GlobalVariableGet("_MonitorScreen_ScreenShot") !=0 )

{

如果(!WindowScreenShot(filename,900,600))Print("WindowScreenShot错误。"+GetLastError())。

}

}

否则FileClose(handle)。

}

希望得到任何帮助。谢谢你。
 
mladen:
它工作正常 文件必须在 experts/files 子文件夹中,我用票号 0 作为例子,所以全文件名在我的例子中是 "EURUSD_Demo_0_Open.gif",它打开它没有问题(如果你使用 FILE_CSV 和使用 FILE_BIN,它都可以做到)。因此,如果它被保存在正确的文件夹和正确的名称中,你的代码可以正常工作。

谢谢。是的,该文件保存在正确的文件夹和正确的名称中。我可能会尝试使用FILE_BIN 而不是FILE_CSV来检查错误信息是否再次出现。

 

...

如何使我的电脑在指标中正确显示俄语单词?...谢谢...

原因: