任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1093

 
A13ksandr:对不起!当然,一切都发生在void OnTick()中。我把它写下来了)
然后在测试人员的日志中会有一个错误代码,你可以用它来弄清楚。
 
evillive:
然后在测试人员的日志中有一个错误代码,它可以用于进一步调查。

没有错误。它只是在进入程序时挂起。还有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()。

}

}

}

}

}

}

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

 
alvlaf:

只需从CountTrades函数中删除OrderSymbol() == Symbol()的条件,并添加OrderType() == OP_BUY || OrderType() == OP_SELL,不是吗?

如果(SignalBuy() && CountTrades() < MaxOpenOrders)在OrderSend之前的OnTick中改变条件...卖出的情况也是如此。
 
A13ksandr:
谢谢,我试过了--机器人开始在每一个刻度 上开出一堆订单。
 
A13ksandr:

如果(OrderMagicNumber() == Magic && (OrderType() == OrderType() == OP_BUY || OrderType() == OP_SELL))

我改得对吗?

 
alvlaf:

问候,请您告诉我,在二元期权中,防止不同工具同时打开超过设定数量的系列(机器人同时连接到不同工具的几个图表上)的最佳方法?

外置双数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()。

}

}

}

}

}

}

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

请告诉我你使用MagicNumber的目的是什么,它在这个策略中 提供了什么?IMHO,你也可以在这里扔掉OnInit OnDeinit函数
 
evillive:


时间可以直接设置为数据时间格式,不需要在转换上浪费机器时间,工作原理是这样的。

Extern datetime StartTime = D'07:00';

在这种时间格式下,当我们启动EA时,我们得到的是编译日期,而我们希望编译日期是今天。

如何纠正?

 
RichLux:

这种时间格式在启动EA时给出了EA的编译日期,但我希望能有今天的日期。

如何解决这个问题?

你在启动时将该参数改为所需的参数,方法与其他用户参数相同。

而且由于某些原因,它显示的是运行脚本时的当前日期。

 
LRA:
请告诉我,使用MagicNumber的目的是什么,在这个策略中 它能带来什么?IMHO,你也可以在这里扔掉OnInit OnDeinit函数
"在这个战略中 "这句话的目的是什么?如果你在账户中手动进行交易或运行另一个专家顾问,那么就需要魔法,这样就不会触及这些订单。我想是的。