//+------------------------------------------------------------------+//| chuale_test1.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.abc.com"#property version"1.00"#property strictexterndouble TakeProfit=500;
externdouble Lots=0.1;
externdouble StopLoss=300;
double bar1;
double bar2;
double bar3;
int total,ticket;
datetime previousTime;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int init()
{
//---//---return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//---return(0);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int start()
{
total=OrdersTotal();
/*
counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
IndicatorCounted() is actually for indicators not EA
*/
bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
/*
Comment("Bar1 = "+DoubleToString(bar1,Digits)+"\n"+
"Bar2 = "+DoubleToString(bar2,Digits)+"\n"+
"Bar3 = "+DoubleToString(bar3,Digits)+"\n"
);
*///Close any orders if conditions are metif(total>0)
{
if(bar3<-1) OrderClose(ticket,OrderLots(),Bid,3,Green);
if(bar3>1) OrderClose(ticket,OrderLots(),Ask,3,Red);
}
if(Time[0]==previousTime) return(0); //EA will not go past this point unless it is a new bar
previousTime=Time[0]; // If it was a new bar , it's old now but continue to the end// if no order open and new barif(total<1)
{
if(bar2>1)// if condition met
{
//place buy order
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); // if returned ticket is -1 OrderSent failedreturn(0);
}
// or if conditions for sell metif(bar2<-1)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
return(0); //return to start
}
}
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| chuale_test1.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.abc.com"#property version"1.00"#property strictexterndouble TakeProfit=500;
externdouble Lots=0.1;
externdouble StopLoss=300;
externint MagicNumber = 12345;
externint Slip = 3;
double bar1;
double bar2;
double bar3;
int myTrades,ticket;
datetime previousTime;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int init()
{
//---//---return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//---return(0);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int start()
{
myTrades = CountTrades();//Count trades function counts this EA trades only//
bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
//Close any orders if conditions are metif(myTrades>0)
{
if(bar3<-1) CloseThisSymbolAll();
if(bar3>1) CloseThisSymbolAll();
}
if(Time[0]==previousTime) return(0); //EA will not go past this point unless it is a new bar
previousTime=Time[0]; // If it was a new bar , it's old now but continue to the end// if no order open and new barif(myTrades<1)
{
if(bar2>1)// if condition met
{
//place buy order
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",MagicNumber,0,Green);
if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); // if returned ticket is -1 OrderSent failedreturn(0);
}
// or if conditions for sell metif(bar2<-1)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",MagicNumber,0,Red);
if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
return(0); //return to start
}
}
return(0);
}
//========================================================================int CountTrades()
{
int count=0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
if(OrderType()==OP_SELL || OrderType()==OP_BUY)
count++;
}
return(count);
}
//========================================================================void CloseThisSymbolAll()
{
int trade;
for(trade=OrdersTotal();trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()) continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
}
//Sleep(1000);
}
}
//========================================================================
大家好。
现在我在OrderClose中插入了票据和手数,而没有使用OrderTicket()和OrderLots(),但它也没有关闭订单。请帮助我。
你有几件事做错了。我假设你想让这个EA在M1时间框架的日元对上工作。你是想只在新条上下单,只在新条上平仓,还是想在新条上进场,如果满足条件就出场?以下是我的想法。
首先你用OrdersTotal()计算订单。
然后计算你的变量
如果市场上有订单,检查 它们是否必须被关闭
如果市场上没有订单,检查是否满足进入条件。
如果你有任何问题,请告诉我。
票是一个局部变量,所以下次勾选时,它将不会有相同的值
放在函数之外,使其成为全局性 的。
total=OrdersTotal();
?????? ..... 无用
正确检查 你有哪些交易
寻找正确的符号和正确的魔法数字
通过一个订单循环,你可以选择正确的交易来关闭。
.
用你的方法
当你重新启动你的电脑时,你会失去票据价值,所以
失败.....
你为什么引用我的帖子,然后不加评论?
是的,现在可以关闭了。谢谢你,GumRai。现在我知道票号会根据刻度不断变化,那么如何获得未结订单的票号呢?我必须使用OrderTicket(),对吗?
如果你使用OrderTicket(),那么请确保你先使用OrderSelect(),并确保它是你想关闭的交易。
是的,现在可以平仓了。谢谢你,GumRai。现在我知道票号会根据刻度不断变化,那么如何获得未平仓订单的票号?我必须使用OrderTicket(),对吗?
你好,Chuale。
这里有一个简单的方法来选择你的订单,并通过符号和魔法号码来关闭订单。
是的,现在可以平仓了。谢谢你,GumRai。现在我知道票据号码根据点位不断变化,那么如何获得开仓订单的票据号码?我必须使用OrderTicket(),对吗?
再次问候Chuale。
我在USDJPY上玩了一下你的想法,如果不做一些改变,我无法得到积极的结果。这里是我在M1图表上对USDJPY的结果样本。
你打算在不同的货币对上使用它吗?
在bar3<-1或bar3>1时退出并没有得到积极的结果。
?????? ..... 无用
正确检查你有哪些交易
寻找正确的符号和正确的魔法数字
通过一个订单循环,你可以选择正确的交易来关闭。
.
用你的方法
当你重新启动你的电脑时,你会失去票据价值,所以
失败.....
如果你的意思是这不是关闭订单的最佳方式,我同意,但如果这个人不想使用OrderSelect(或不知道如何使用),并且不在市场上留下任何未结订单,那么它就能发挥作用。
我们试图在这里互相帮助,但你的回答没有起到一点作用,你没有告诉他如何使用订单选择功能,他的EA现在也没有因为你的评论而更好地工作。
下次你想帮忙的时候,用正确的方法,把正确的代码放在那里,这样别人就能真正学到东西。
你有几件事做错了。我假设你想让这个EA在M1时间框架的日元对上工作。你是想只在新条上下单,只在新条上平仓,还是想在新条上进场,如果满足条件就出场?这是我的想法。
首先,你用OrdersTotal()计算订单。
然后计算你的变量
如果市场上有订单,检查它们是否必须被关闭
如果市场上没有订单,检查是否满足进入条件。
如果你有任何问题,请告诉我。