任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1093 1...108610871088108910901091109210931094109510961097109810991100...1178 新评论 Vitalie Postolache 2016.09.09 05:40 #10921 A13ksandr:对不起!当然,一切都发生在void OnTick()中。我把它写下来了) 然后在测试人员的日志中会有一个错误代码,你可以用它来弄清楚。 A13ksandr 2016.09.09 06:07 #10922 evillive: 然后在测试人员的日志中有一个错误代码,它可以用于进一步调查。没有错误。它只是在进入程序时挂起。还有StartSell,它正常进入。这是某种混乱。我更新了引号,它可以工作。因为有一些洞,所以不正确,但至少不会悬空。 Aleksandr Afanasenko 2016.09.09 07:01 #10923 问候,请您告诉我,在二元期权中,防止不同工具同时打开超过设定数量的系列(机器人同时连接到不同工具的几个图表上)的最佳方法?外置双数Lots = 1; // Lotsextern int Exp = 1; // 过期时间外部int Wait = 0; // 一个方向的烛台数量Extern int Timeout = 1; // Time slot外置双倍数Multiplier = 3; // 倍增器Extern int int Slippage = 5; // Slippage外部int MaxOpenOrders = 1; // 同时打开的订单的最大数量外置 int Magic = 774274; // Magicint票,类型。双倍价格,地段。//+------------------------------------------------------------------+//|专家初始化功能|//+------------------------------------------------------------------+int OnInit(){return(INIT_SUCCEEDED)。}//+------------------------------------------------------------------+//|专家去初始化函数|//+------------------------------------------------------------------+空白的OnDeinit(const int reason)。{}//+------------------------------------------------------------------+//|专家勾选功能|//+------------------------------------------------------------------+空白的OnTick(){// --------------- 公开交易 ---------------如果(CountTrades() == 0) // 订单的数量必须等于零{如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = Ask;如果(类型== OP_SELL)价格=Bid。Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。// 如果上一次交易的利润 等于零,则将开出相同的交易。{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = Ask;如果(类型== OP_SELL)价格=Bid。Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。{如果(SignalBuy() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。}如果(SignalSell() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。}}}}//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0。for (int i=OrdersTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++。}}return(cnt)。}//+------------------------------------------------------------------+int CountHistTrades(int type = -1){int cnt = 0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++。}}return(cnt)。}//+------------------------------------------------------------------+bool SignalBuy(){for (int i=1; i<=Wait; i++){如果(Close[i]>Open[i])返回(false)。}如果((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+bool SignalSell(){for (int i=1; i<=Wait; i++){如果(Close[i]<Open[i])返回(false)。}如果((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime()。}}}}return(opentime)。}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){如果(OrderCloseTime() > time){time = OrderCloseTime()。type = OrderType()。}}}}return(type)。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;double lots = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderOpenTime() > time){time = OrderOpenTime()。时间 = OrderLots()。}}}}return(lot)。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;双倍价格=0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > time){time = OrderCloseTime()。price = OrderClosePrice()。}}}}}}//+------------------------------------------------------------------+double PriceOpenLastHistOrder(int type = -1){datetime time = 0;双倍价格=0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > time){time = OrderCloseTime()。price = OrderOpenPrice()。}}}}}}//+------------------------------------------------------------------+ 问吧! Any rookie question, so 如何编码? A13ksandr 2016.09.09 08:53 #10924 alvlaf:只需从CountTrades函数中删除OrderSymbol() == Symbol()的条件,并添加OrderType() == OP_BUY || OrderType() == OP_SELL,不是吗?如果(SignalBuy() && CountTrades() < MaxOpenOrders)在OrderSend之前的OnTick中改变条件...卖出的情况也是如此。 Aleksandr Afanasenko 2016.09.09 12:12 #10925 A13ksandr: 谢谢,我试过了--机器人开始在每一个刻度 上开出一堆订单。 Aleksandr Afanasenko 2016.09.09 12:18 #10926 A13ksandr: 如果(OrderMagicNumber() == Magic && (OrderType() == OrderType() == OP_BUY || OrderType() == OP_SELL))我改得对吗? [删除] 2016.09.09 14:08 #10927 alvlaf:问候,请您告诉我,在二元期权中,防止不同工具同时打开超过设定数量的系列(机器人同时连接到不同工具的几个图表上)的最佳方法?外置双数Lots = 1; // Lotsextern int Exp = 1; // 过期时间外部int Wait = 0; // 一个方向的烛台数量Extern int Timeout = 1; // Time slot外置双倍数Multiplier = 3; // 倍增器Extern int int Slippage = 5; // Slippage外部int MaxOpenOrders = 1; // 同时打开的订单的最大数量外置 int Magic = 774274; // Magicint票,类型。双倍价格,地段。//+------------------------------------------------------------------+//|专家初始化功能|//+------------------------------------------------------------------+int OnInit(){return(INIT_SUCCEEDED)。}//+------------------------------------------------------------------+//|专家去初始化函数|//+------------------------------------------------------------------+空白的OnDeinit(const int reason)。{}//+------------------------------------------------------------------+//|专家勾选功能|//+------------------------------------------------------------------+空白的OnTick(){// --------------- 公开交易 ---------------如果(CountTrades() == 0) // 订单的数量必须等于零{如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = Ask;如果(类型== OP_SELL)价格=Bid。Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。// 如果上一次交易的利润等于零,则将开出相同的交易。{类型=TypeLastHistOrder()。如果(Type == OP_BUY) Price = Ask;如果(类型== OP_SELL)价格=Bid。Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。{如果(SignalBuy() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。}如果(SignalSell() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。}}}}//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0。for (int i=OrdersTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++。}}return(cnt)。}//+------------------------------------------------------------------+int CountHistTrades(int type = -1){int cnt = 0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))cnt++。}}return(cnt)。}//+------------------------------------------------------------------+bool SignalBuy(){for (int i=1; i<=Wait; i++){如果(Close[i]>Open[i])返回(false)。}如果((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+bool SignalSell(){for (int i=1; i<=Wait; i++){如果(Close[i]<Open[i])返回(false)。}如果((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )&& CountHistTrades() > 0) return(true)。如果(CountHistTrades() ==0)返回(true)。return(false)。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime()。}}}}return(opentime)。}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){如果(OrderCloseTime() > time){time = OrderCloseTime()。type = OrderType()。}}}}return(type)。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;double lots = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderOpenTime() > time){time = OrderOpenTime()。时间 = OrderLots()。}}}}return(lot)。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;双倍价格=0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > time){time = OrderCloseTime()。price = OrderClosePrice()。}}}}}}//+------------------------------------------------------------------+double PriceOpenLastHistOrder(int type = -1){datetime time = 0;双倍价格=0。for (int i=OrdersHistoryTotal()-1; i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)){如果(OrderCloseTime() > time){time = OrderCloseTime()。price = OrderOpenPrice()。}}}}}}//+------------------------------------------------------------------+ 请告诉我你使用MagicNumber的目的是什么,它在这个策略中 提供了什么?IMHO,你也可以在这里扔掉OnInit OnDeinit函数 RichLux 2016.09.09 17:12 #10928 evillive:时间可以直接设置为数据时间格式,不需要在转换上浪费机器时间,工作原理是这样的。Extern datetime StartTime = D'07:00';在这种时间格式下,当我们启动EA时,我们得到的是编译日期,而我们希望编译日期是今天。如何纠正? Vitalie Postolache 2016.09.09 18:57 #10929 RichLux:这种时间格式在启动EA时给出了EA的编译日期,但我希望能有今天的日期。如何解决这个问题?你在启动时将该参数改为所需的参数,方法与其他用户参数相同。而且由于某些原因,它显示的是运行脚本时的当前日期。 A13ksandr 2016.09.10 11:23 #10930 LRA: 请告诉我,使用MagicNumber的目的是什么,在这个策略中 它能带来什么?IMHO,你也可以在这里扔掉OnInit OnDeinit函数"在这个战略中 "这句话的目的是什么?如果你在账户中手动进行交易或运行另一个专家顾问,那么就需要魔法,这样就不会触及这些订单。我想是的。 1...108610871088108910901091109210931094109510961097109810991100...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
然后在测试人员的日志中有一个错误代码,它可以用于进一步调查。
没有错误。它只是在进入程序时挂起。还有StartSell,它正常进入。这是某种混乱。
我更新了引号,它可以工作。因为有一些洞,所以不正确,但至少不会悬空。
问候,请您告诉我,在二元期权中,防止不同工具同时打开超过设定数量的系列(机器人同时连接到不同工具的几个图表上)的最佳方法?
外置双数Lots = 1; // Lots
extern int Exp = 1; // 过期时间
外部int Wait = 0; // 一个方向的烛台数量
Extern int Timeout = 1; // Time slot
外置双倍数Multiplier = 3; // 倍增器
Extern int int Slippage = 5; // Slippage
外部int MaxOpenOrders = 1; // 同时打开的订单的最大数量
外置 int Magic = 774274; // Magic
int票,类型。
双倍价格,地段。
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//|专家去初始化函数|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
}
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
// --------------- 公开交易 ---------------
如果(CountTrades() == 0) // 订单的数量必须等于零
{
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。
// 如果上一次交易的利润 等于零,则将开出相同的交易。
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )
|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。
{
如果(SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。
}
如果(SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。
}
}
}
}
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0。
for (int i=OrdersTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++。
}
}
return(cnt)。
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++。
}
}
return(cnt)。
}
//+------------------------------------------------------------------+
bool SignalBuy()
{
for (int i=1; i<=Wait; i++)
{
如果(Close[i]>Open[i])返回(false)。
}
如果((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
bool SignalSell()
{
for (int i=1; i<=Wait; i++)
{
如果(Close[i]<Open[i])返回(false)。
}
如果((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime()。
}
}
}
}
return(opentime)。
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
type = OrderType()。
}
}
}
}
return(type)。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderOpenTime() > time)
{
time = OrderOpenTime()。
时间 = OrderLots()。
}
}
}
}
return(lot)。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
双倍价格=0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
price = OrderClosePrice()。
}
}
}
}
}
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
双倍价格=0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
price = OrderOpenPrice()。
}
}
}
}
}
}
//+------------------------------------------------------------------+
只需从CountTrades函数中删除OrderSymbol() == Symbol()的条件,并添加OrderType() == OP_BUY || OrderType() == OP_SELL,不是吗?
如果(SignalBuy() && CountTrades() < MaxOpenOrders)在OrderSend之前的OnTick中改变条件...卖出的情况也是如此。如果(OrderMagicNumber() == Magic && (OrderType() == OrderType() == OP_BUY || OrderType() == OP_SELL))
我改得对吗?
问候,请您告诉我,在二元期权中,防止不同工具同时打开超过设定数量的系列(机器人同时连接到不同工具的几个图表上)的最佳方法?
外置双数Lots = 1; // Lots
extern int Exp = 1; // 过期时间
外部int Wait = 0; // 一个方向的烛台数量
Extern int Timeout = 1; // Time slot
外置双倍数Multiplier = 3; // 倍增器
Extern int int Slippage = 5; // Slippage
外部int MaxOpenOrders = 1; // 同时打开的订单的最大数量
外置 int Magic = 774274; // Magic
int票,类型。
双倍价格,地段。
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//|专家去初始化函数|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
}
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
// --------------- 公开交易 ---------------
如果(CountTrades() == 0) // 订单的数量必须等于零
{
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。
// 如果上一次交易的利润等于零,则将开出相同的交易。
{
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )
|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。
{
如果(SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。
}
如果(SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。
}
}
}
}
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0。
for (int i=OrdersTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++。
}
}
return(cnt)。
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
cnt++。
}
}
return(cnt)。
}
//+------------------------------------------------------------------+
bool SignalBuy()
{
for (int i=1; i<=Wait; i++)
{
如果(Close[i]>Open[i])返回(false)。
}
如果((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
bool SignalSell()
{
for (int i=1; i<=Wait; i++)
{
如果(Close[i]<Open[i])返回(false)。
}
如果((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )
&& CountHistTrades() > 0) return(true)。
如果(CountHistTrades() ==0)返回(true)。
return(false)。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime()。
}
}
}
}
return(opentime)。
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
type = OrderType()。
}
}
}
}
return(type)。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
double lots = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderOpenTime() > time)
{
time = OrderOpenTime()。
时间 = OrderLots()。
}
}
}
}
return(lot)。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
双倍价格=0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
price = OrderClosePrice()。
}
}
}
}
}
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
双倍价格=0。
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))
{
如果(OrderCloseTime() > time)
{
time = OrderCloseTime()。
price = OrderOpenPrice()。
}
}
}
}
}
}
//+------------------------------------------------------------------+
时间可以直接设置为数据时间格式,不需要在转换上浪费机器时间,工作原理是这样的。
Extern datetime StartTime = D'07:00';
在这种时间格式下,当我们启动EA时,我们得到的是编译日期,而我们希望编译日期是今天。
如何纠正?
这种时间格式在启动EA时给出了EA的编译日期,但我希望能有今天的日期。
如何解决这个问题?
你在启动时将该参数改为所需的参数,方法与其他用户参数相同。
而且由于某些原因,它显示的是运行脚本时的当前日期。
请告诉我,使用MagicNumber的目的是什么,在这个策略中 它能带来什么?IMHO,你也可以在这里扔掉OnInit OnDeinit函数