//+------------------------------------------------------------------+ //| Der Stundentrader.mq4 |/| Der Marc //|Der Marc |/| //| Es gibt gar keine Internetseite |/| //+------------------------------------------------------------------+ #财产版权"Der Marc" #属性链接 "Es gibt gar keine Internetseite"
//Wichtige Variablen 外部双数Minlot=0.01。 外部int Digits2Round=2; 外部int PercentOfFreeDepo=1; 外置 int Slippage=5; 外置 int MagicNumber =1; extern int TradeHour3=3; extern int TradeHour4=4; extern int TradeHour7=7; extern int TradeHour10=10; extern int TradeHour17=17; extern int TradeHour18=18; extern int TradeHour20=20; extern int TradeHour12=12; extern int TradeHour23=23; 外置 int StopLoss=400;
//全局变量 int BuyTicket; int SellTicket; Double UsePoint; int UseSlippage;
int openbuy = 0; int opensell = 0; //+------------------------------------------------------------------+ //|专家初始化函数 | //+------------------------------------------------------------------+ int init() { UsePoint = PipPoint(Symbol())。 UseSlippage = GetSlippage(Symbol(), Slippage); }
这是非常错误的 . .
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
(BuyTicket || SellTicket)的结果是真或假 . . . 在这种情况下,真或假将被视为1或0 . . . 不是你的SellTicket或BuyTicket号码 .
Stoploss = 40 . . . . 当你在OrderSend中使用止损时,它是一个价格 . . . 不是一个点数,滑点是一个点数 . . . 阅读文档。OrderSend
好的,我知道你的意思,所以我需要一个命令来选择订单,同时使用OrderSelect...或者OrderSelect在这种情况下通常是错误的?
阅读文档 . . 在 你使用OrderLots、OrderTicket、OrderOpenPrice等功能之前,需要使用OrderSelect 来选择订单 "注意:订单必须是之前 被OrderSelect() 函数选择的 。
如果你不需要使用与现有订单有关的信息,你就不需要OrderSelect,如果你需要......那么你就需要。
阅读文档 . . 在 你使用OrderLots、OrderTicket、OrderOpenPrice等功能之前,需要使用OrderSelect 来选择订单 "注意:订单必须是之前 被OrderSelect() 函数选择的 。
如果你不需要使用与现有订单有关的信息,你就不需要OrderSelect。如果你需要 ... ... 那么你就需要。
目前我认为我需要这些信息,因为如果在市场上有一个头寸,我需要关闭它并替换成另一个。我认为OrderSelect可以帮助我。但是,如果订单选择只是针对未平仓订单,而不是针对市场上的有效头寸,那就没有用了。我说的对吗?
但是,如果OrderSelect没有帮助,我怎样才能关闭活动头寸?
问候
马克
nirvanamac:
这似乎大部分是正确的,但现在我需要知道为什么程序只执行12和23的卖单...而不执行买单...?
它可能是这样的......而且它可能产生了一个你没有捕获的错误......。
尝试一下 ...
你的OrderClose是错误的 ......你在Ask开了一个Buy,关闭Buy你Sell ......你在Bid卖出,你在Bid开了一个Sell,关闭Sell你Buy ......你在Ask购买。
你的OrderClose是错误的 ......你在Ask开了一个Buy,为了关闭Buy你Sell ......你在Bid上Sell,你在Bid上开了一个Sell,为了关闭Sell你Buy ......你Buy。
非常感谢你对我的帮助......我根据你的提示修改了代码。它看起来是这样的。
//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |/| Der Marc
//|Der Marc |/|
//| Es gibt gar keine Internetseite |/|
//+------------------------------------------------------------------+
#财产版权"Der Marc"
#属性链接 "Es gibt gar keine Internetseite"
//Wichtige Variablen
外部双数Minlot=0.01。
外部int Digits2Round=2;
外部int PercentOfFreeDepo=1;
外置 int Slippage=5;
外置 int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
外置 int StopLoss=400;
//全局变量
int BuyTicket;
int SellTicket;
Double UsePoint;
int UseSlippage;
int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//|专家初始化函数 |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol())。
UseSlippage = GetSlippage(Symbol(), Slippage);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(), Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100), Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== 让我们确定手数和风险 ===================================
如果 ( Lot<Minlot )
{
Lot=Minlot。
}
Comment( "/n", "可接受的风险是 ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果((OrderOpenTime()+3600) < TimeCurrent()
{
如果(OrderType() == OP_BUY || OP_SELL)
{
bool Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red);
openbuy = 0;
opensell = 0。
}
如果(OrderType() == OP_SELL)
{
Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red)。
opensell = 0;
openbuy = 0。
}
}
}
}
//买入订单
如果((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour()) && openbuy == 0) //信号买入
{
openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Ask - StopLoss * Point,0, "time trader buy order",MagicNumber,0,Blue) 。
if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
}
//SellOrder
如果((TradeHour12==Hour())|(TradeHour23==Hour())&& opensell ==0) //卖出信号
{
opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0, "time trader sell order",MagicNumber,0,Green)。
if (opensell < 0) Print("OrderSend OP_SELL failed, error: " , GetLastError() );
}
//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point功能
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(Calcdigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
否则如果(Calcdigits == 4 || CalcDigits == 5) CalcPoint = 0.0001。
返回(CalcPoint)。
}
//获取滑移量函数
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
如果(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
否则如果(Calcdigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
返回(CalcSlippage)。
}
在运行回测时,有一个错误信息ERR_INVALID_TICKET(4108)。
不是所有的订单都被执行
会不会是错误属于之前触发了SL的事实?