基本问题... - 页 8

 
 
newdigital:
请看这个主题:https://www.mql5.com/en/forum/178677

真的很感谢,对于文件的打开说明和下载链接

 

10points3

求你了,程序员们!

我们需要在10points3的EA中,当第三笔交易开始时,第一笔交易关闭,我正在尝试,但它仍然关闭所有的位置。

事实上,我们有。

如果(PreviousOpenOrders>OpenOrders)

{

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。

mode=OrderType()。

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

{

如果(mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),slipage,Blue); }

如果(模式==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),slipage,Red); }

return(0);

}

我在想这样做。

1.当第二笔交易开始时,改变第一笔交易的魔法号码,例如magicnumber+1

2.当第三笔交易开始时,关闭第一笔交易,并指定magicnumber+1。

我说的对吗?

或者我可以用其他什么方法来确定第一笔交易的开仓,然后再将其关闭?

如果你能指导我或进行修改,更好,因为我不是一个程序员,我只是在学习。

这种改变将是霍利圣杯 的开始!!!。

 

10points3

对不起,是EA。

它就在这个主题里。

https://www.mql5.com/en/forum/174975

谢谢!

附加的文件:
10p3v0.03_1.mq4  12 kb
 

编程帮助--返回运算符

你好

我是mt4编程的初学者,现在我经常试图找到一个解决方案,将变量从一个无效函数 提交到主程序 "start()"。

下面你可以看到一个例子,问题是,我如何从变量 "CountOpenSell"、"CountOpenBuy"、"ProfitSell "和 "ProfitBuy "向start() - mainprogram......... 提交值。

我已经添加了我的建议(用粗体字返回),但我不知道它是否正确,"start() "主程序的正确代码是怎样的?

对不起,我的英语不好,请大家多多帮助。

非常感谢

问候

forex2006

空白 呼叫买入卖出利润()

{ ProfitBuy=0;

ProfitSell=0。

CountOpenSell=0。

CountOpenBuy=0。

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

{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

如果(OrderType()==OP_SELL) {ProfitSell = ProfitSell + OrderProfit();CountOpenSell++; }

如果(OrderType()==OP_BUY) {ProfitBuy = ProfitBuy + OrderProfit();CountOpenBuy++;}。

}

else Print("订单选择时出错", GetLastError())。

}

return(CountOpenSell);

return(CountOpenBuy);

return(ProfitSell);

return(ProfitBuy);

}

 

forex2006编程帮助--返回运算符

你好,forex2006。

如果真的想学习mql,我建议你试试codersguru的教程,我就是从那里开始的。至于你的问题,无效函数 不能返回值,如果你想从无效函数中获得值,你必须使用全局变量。对你来说,最好的方法是使用一个返回值的函数,用参数来表示你想要的值。 下面是一个简单的例子。尽量避免在函数中使用全局变量,因为这可能给你以后的工作带来困难。

我希望这对你有帮助

int start()

{

double ProfitBuy = CallBuySellProfit(OP_BUY,false)。

double ProfitSell = CallBuySellProfit(OP_SELL,false);

int CountOpenBuy = CallBuySellProfit(OP_BUY,true);

int CountOpenSell = CallBuySellProfit(OP_SELL,true);

评论( "ProfitBuy:"+DoubleToStr(ProfitBuy,2) +"\n "+

"ProfitSell: "+DoubleToStr(ProfitSell,2) +"\n "+

"CountOpenBuy:"+DoubleToStr(CountOpenBuy,2)+"\n "+

"CountOpenSell: "+DoubleToStr(CountOpenSell,2)+"\n "+

"");

返回。

}

double CallBuySellProfit(int iOrderType, bool bCount)

{

double dProfit = 0;

int iCount = 0;

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

如果(OrderType()==iOrderType)

{

dProfit = dProfit + OrderProfit();

iCount++;

}

}

否则

{

Print( "Error when order select ", GetLastError());

}

}//结束

如果(bCount)返回(iCount)。

else return(dProfit);

}//结束 CallBuySellProfit

 

停止EA在同一根柱子上的交易

你好,请问如何编写代码,使EA检查 是否已经在该条上进行了交易,然后在新条上不再进行交易?

谢谢你

 

matrixebiz,你是否考虑过在同一根蜡烛收盘前,交易开盘和收盘的可能性? 你或许也应该检查一下历史列表。

我总是把我写的这个小函数 移植到我所有的EA中,也许你也会发现它很有用。

bool DecideToOpenTrade()

{

int total = OrdersTotal();

if (total > 0)

{

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

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)

{

return (false);

}

}

}

}

// in case trades has already opened and closed within the candle

int histotal = OrdersHistoryTotal();

if (histotal > 0)

{

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

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)

{

if (Time[0] <= OrderOpenTime()) // don't open a new position if we're still on the same candle

{

return (false);

}

}

}

}

}

return (true);

}

int start()

{

// some time check codes first.. blah blah

// ...

// ...

// ...

// check signals

if (Should_Buy())

{

if (DecideToOpenTrade())

{

//... trade opening codes here

}

}

if (Should_Sell())

{

if (DecideToOpenTrade())

{

//... trade opening codes here

}

}

}

注意:这个函数假定你已经为EA_MAGIC_NUM设置了一个唯一的值。这样一来,检查就不会看其他EA所开的交易。

Should_Buy()和Should_Sell()是我在所有的EA中创建的函数,用于确定是否发生了买入或卖出信号。

希望这有帮助。如果你需要进一步澄清,请给我发邮件。

问候。

 

更新后的帖子如下...

 

这似乎对我有用 谢谢你

void DesideToOpen()

//----------------------------------------------------------------+

//----------------------------------------------------------------+

{

int total = OrdersTotal();

if (total > 0)

{

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

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

if(OrderComment() == EA_Name + MagicNumber) DecideToOpenTrade = false;

}

}

}

// in case trades has already opened and closed within the candle

int histotal = OrdersHistoryTotal();

if (histotal > 0)

{

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

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderComment() == EA_Name + MagicNumber)

{

if (Time[0] <= OrderOpenTime()) DecideToOpenTrade = false; // don't open a new position if we're still on the same candle

}

}

}

}

}

原因: