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

 
alvlaf:
这段代码是用MQL5写的吗?

for (int i=0; i<SymbolCount; i++)

{

如果(CountTrades() == 0) // 订单的数量必须为零

{

如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())

// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。

{

类型=TypeLastHistOrder()。

如果(Type == OP_BUY) Price =LastAsk;

如果(类型==OP_SELL)价格=LastBid

Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);

ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。

}

如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal()

// 如果最后一笔交易的利润 等于零,则将开出相同的交易

{

类型=TypeLastHistOrder()。

如果(Type == OP_BUY) Price =LastAsk;

如果(类型==OP_SELL)价格=LastBid

Lot = NormalizeDouble(LotsLastHistOrder(), 2);

ticket = OrderSend(Symbols[i], 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(Symbols[i])&& MaxOpenOrders > OrdersTotal())

{

ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)

}

如果(SignalSell(Symbols[i])&& MaxOpenOrders > OrdersTotal())

{

ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)

}

}

}

}

在OnTick中的代码在单词之后,以此类推。用MQL4编写,你需要MQL5吗?

对于每个OrderSend,MaxOpenOrders条件应不大于OrdersTotal()。

程序代码(删除OrderSymbol()==Symbol(),并输入iClose()/iOpen()而不是Close/Open),我没有检查代码的正确性。

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

int CountTrades(int type = -1)

{

int cnt = 0。

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

{

如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

如果(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))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++。

}

}

return(cnt)。

}

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

bool SignalBuy(string Sym)

{

for (int i=1; i<=Wait; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架

double O = iOpen(Sym, PERIOD_M5, i);

如果(C>O)返回(false)。

}

如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )

&& CountHistTrades() > 0) return(true)。

如果(CountHistTrades() ==0)返回(true)。

return(false)。

}

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

bool SignalSell(string Sym)

{

for (int i=1; i<=Wait; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架

double O = iOpen(Sym, PERIOD_M5, i);

如果(C < O)返回(false)。

}

如果((iBarShift(Sym, 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))

{

如果(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))

{

如果(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))

{

如果(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))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

如果(OrderCloseTime() > time)

{

time = OrderCloseTime()。

price = OrderClosePrice()。

}

}

}

}

return(price)。

}

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

double PriceOpenLastHistOrder(int type = -1)

{

datetime time = 0;

双倍价格=0。

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

{

如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

如果(OrderCloseTime() > time)

{

time = OrderCloseTime()。

price = OrderOpenPrice()。

}

}

}

}

return(price)。

}

 
alvlaf:

外来的int Exp = 1;

ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0,IntegerToString(Exp), Magic)。

这个代码对你有用吗?日期必须在这里,并且比当前日期大10分钟(即TimeCurrent() + 600最小值)。

 
A13ksandr:

for (int i=0; i<SymbolCount; i++)

{

如果(CountTrades() == 0) // 订单的数量必须为零

{

如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())

// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。

{

类型=TypeLastHistOrder()。

如果(Type == OP_BUY) Price =LastAsk;

如果(类型==OP_SELL)价格=LastBid

Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);

ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。

}

如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0&& MaxOpenOrders > OrdersTotal()

// 如果最后一笔交易的利润等于零,则将开出相同的交易

{

类型=TypeLastHistOrder()。

如果(Type == OP_BUY) Price =LastAsk;

如果(类型==OP_SELL)价格=LastBid

Lot = NormalizeDouble(LotsLastHistOrder(), 2);

ticket = OrderSend(Symbols[i], 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(Symbols[i])&& MaxOpenOrders > OrdersTotal())

{

ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)

}

如果(SignalSell(Symbols[i])&& MaxOpenOrders > OrdersTotal())

{

ticket = OrderSend(Symbols[i], OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)

}

}

}

}

在OnTick中的代码在单词之后,以此类推。用MQL4编写,你需要MQL5吗?

对于每个OrderSend,MaxOpenOrders条件应不大于OrdersTotal()。

程序代码(删除OrderSymbol()==Symbol(),并输入iClose()/iOpen()而不是Close/Open),我没有检查代码的正确性。

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

int CountTrades(int type = -1)

{

int cnt = 0。

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

{

如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

如果(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))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++。

}

}

return(cnt)。

}

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

bool SignalBuy(string Sym)

{

for (int i=1; i<=Wait; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架

double O = iOpen(Sym, PERIOD_M5, i);

如果(C>O)返回(false)。

}

如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )

&& CountHistTrades() > 0) return(true)。

如果(CountHistTrades() ==0)返回(true)。

return(false)。

}

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

bool SignalSell(string Sym)

{

for (int i=1; i<=Wait; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架

double O = iOpen(Sym, PERIOD_M5, i);

如果(C < O)返回(false)。

}

如果((iBarShift(Sym, 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))

{

如果(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))

{

如果(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))

{

如果(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))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

如果(OrderCloseTime() > time)

{

time = OrderCloseTime()。

price = OrderClosePrice()。

}

}

}

}

return(price)。

}

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

double PriceOpenLastHistOrder(int type = -1)

{

datetime time = 0;

双倍价格=0。

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

{

如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

如果(OrderCloseTime() > time)

{

time = OrderCloseTime()。

price = OrderOpenPrice()。

}

}

}

}

return(price)。

}

给出了几个错误,无法修复。这里有什么问题吗?

//+------------------------------------------------------------------+
//| BB1.mq4 |
//| Copyright 2016, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright"Copyright 2016, MetaQuotes Software Corp.
#属性链接 "https://www.mql5.com"
#财产版本 "1.00"
#属性严格

外置双数Lots = 1; // Lots
extern int Exp = 1; // 过期时间
外部int Wait = 2; // 一个方向的烛台数量
Extern int Timeout = 1; // Time slot
外置双倍数Multiplier = 3; // 倍增器
外部int Slippage = 5; // Slippage
外置 int Magic = 774274; // Magic
extern int MaxOpenOrders = 1; // 最大订单数

int ticket, Type, SymbolCount;
双倍价格,地段。

输入字符串 TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // 交易的符号

string Symbols[50]; // 50是最大可能的符号数。


//--------------------------------------------------

int OnInit()

{

如果(IsTesting() || !ExtractSymbols())

{

SymbolCount = 1;

Symbols[0] = Symbol()。

}

return(INIT_SUCCEEDED)。

}

//--------------------------------------------------

bool ExtractSymbols()

{

ushort Comma = StringGetCharacter(",", 0);

SymbolCount = StringSplit(TradeSymbols, Comma, Symbols);

for (int i = 0; i < SymbolCount; i++)

{

StringToUpper(Symbols[i])。

符号[i] = StringTrimRight(Symbols[i]); //防止意外的空格。

Symbols[i] = StringTrimLeft(Symbols[i]);

}

如果(SymbolCount > 0)返回(true)。

return(false)。

}

//--------------------------------------------------

空白的OnTick()

{

for (int i=0; i<SymbolCount; i++)

{

如果(CountTrades() == 0) // 订单的数量必须为零

{

如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())

// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。

{

类型=TypeLastHistOrder()。

如果(Type == OP_BUY) Price = LastAsk;

如果(类型==OP_SELL)价格=LastBid。

Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);

ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。

}

如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal()

// 如果最后一笔交易的利润等于零,则将开出相同的交易

{

类型=TypeLastHistOrder()。

如果(Type == OP_BUY) Price = LastAsk;

如果(类型==OP_SELL)价格=LastBid。

Lot = NormalizeDouble(LotsLastHistOrder(), 2);

ticket = OrderSend(Symbols[i], 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(Symbols[i])&& MaxOpenOrders > OrdersTotal())

{

ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)

}

如果(SignalSell(Symbols[i])&& MaxOpenOrders > OrdersTotal())

{

ticket = OrderSend(Symbols[i], 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))

{

如果(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))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++。

}

}

return(cnt)。

}

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

bool SignalBuy(string Sym)

{

for (int i=1; i<=Wait; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。

double O = iOpen(Sym, PERIOD_M5, i);

如果(C>O)返回(false)。

}

如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )

&& CountHistTrades() > 0) return(true)。

如果(CountHistTrades() ==0)返回(true)。

return(false)。

}

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

bool SignalSell(string Sym)

{

for (int i=1; i<=Wait; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。

double O = iOpen(Sym, PERIOD_M5, i);

如果(C < O)返回(false)。

}

如果((iBarShift(Sym, 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))

{

如果(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))

{

如果(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))

{

如果(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))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

如果(OrderCloseTime() > time)

{

time = OrderCloseTime()。

price = OrderClosePrice()。

}

}

}

}

return(price)。

}

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

double PriceOpenLastHistOrder(int type = -1)

{

datetime time = 0;

双倍价格=0。

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

{

如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

如果(OrderCloseTime() > time)

{

time = OrderCloseTime()。

price = OrderOpenPrice()。

}

}

}

}

return(price)。

}

 
伙计们,帮忙。我在Stforex的MT4平台上交易。当我打开订单时,它没有在图表上显示进入水平(没有虚线),因此不方便设置止损。也许谁知道哪里出了问题,如何解决?
 
gloomy159:
伙计们,帮忙。我在Stforex的MT4平台上交易。当我开立一个订单时,它没有在图表上向我显示进入水平(没有虚线),因此不方便设置止损。也许谁知道哪里出了问题,如何解决?

http://prntscr.com/chfa36

设置 - 图表 - 显示交易水平

 

伙计们,什么函数会返回错误65?

帐户无效65帐户号码 不正确
 
testerMT4:

http://prntscr.com/chfa36

设置 - 图表 - 显示交易水平

这个功能最初是启用的,但它仍然没有在图表上显示水平。
 
gloomy159:
这个功能原来是打开的,但图上仍然没有显示出水平。
在颜色设置中,检查颜色 是否被分配给卷,并且与背景颜色不一致。
 
alvlaf:

给出了几个错误,无法得到解决。这里有什么问题吗?


你忘了在OnTick和LastAsk和LastBid变量中添加一个结束的小括号。下面是编译后没有错误的代码,我还没有检查它的功能。

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

//| BB1.mq4 |

//| Copyright 2016, MetaQuotes Software Corp.

//| https://www.mql5.com |

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

#property copyright"Copyright 2016, MetaQuotes Software Corp."

#属性链接 "https://www.mql5.com"

#财产版本 "1.00"

#属性严格


外置双数Lots = 1; // Lots

extern int Exp = 1; // 过期时间

外部int Wait = 2; // 一个方向的烛台数量

Extern int Timeout = 1; // Time slot

外置双倍数Multiplier = 3; // 倍增器

外部int Slippage = 5; // Slippage

外置 int Magic = 774274; // Magic

extern int MaxOpenOrders = 1; // 最大订单数


int ticket, Type, SymbolCount;

双倍价格,地段。

输入字符串 TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // 交易的符号

string Symbols[50]; // 50是最大可能的符号数。

//--------------------------------------------------

int OnInit()

{

如果(IsTesting() || !ExtractSymbols())

{

SymbolCount = 1;

Symbols[0] = Symbol()。

}

return(INIT_SUCCEEDED)。

}

//--------------------------------------------------

bool ExtractSymbols()

{

ushort Comma = StringGetCharacter(",", 0);

SymbolCount = StringSplit(TradeSymbols, Comma, Symbols);

for (int i = 0; i < SymbolCount; i++)

{

StringToUpper(Symbols[i])。

符号[i] = StringTrimRight(Symbols[i]); //防止意外的空格。

Symbols[i] = StringTrimLeft(Symbols[i]);

}

如果(SymbolCount > 0)返回(true)。

return(false)。

}

//--------------------------------------------------

空白的OnTick()

{

for (int i=0; i<SymbolCount; i++)

{

double LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);

double LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);

如果(CountTrades() == 0) // 订单数量必须等于零

{

如果(((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) ) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL) )&& MaxOpenOrders > OrdersTotal())

// 如果最后一笔交易是亏损的,同样的交易将被打开,但手数更多。

{

类型=TypeLastHistOrder()。

如果(Type == OP_BUY) Price = LastAsk;

如果(类型==OP_SELL)价格=LastBid。

Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);

ticket = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic)。

}

如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal()

// 如果最后一笔交易的利润等于零,则将开出相同的交易

{

类型=TypeLastHistOrder()。

如果(Type == OP_BUY) Price = LastAsk;

如果(类型==OP_SELL)价格=LastBid。

Lot = NormalizeDouble(LotsLastHistOrder(), 2);

ticket = OrderSend(Symbols[i], 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(Symbols[i])&& MaxOpenOrders > OrdersTotal())

{

ticket = OrderSend(Symbols[i], OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)

}

如果(SignalSell(Symbols[i])&& MaxOpenOrders > OrdersTotal())

{

ticket = OrderSend(Symbols[i], 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))

{

如果(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))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++。

}

}

return(cnt)。

}

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

bool SignalBuy(string Sym)

{

for (int i=1; i<=Wait; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。

double O = iOpen(Sym, PERIOD_M5, i);

如果(C>O)返回(false)。

}

如果((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout) )

&& CountHistTrades() > 0) return(true)。

如果(CountHistTrades() ==0)返回(true)。

return(false)。

}

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

bool SignalSell(string Sym)

{

for (int i=1; i<=Wait; i++)

{

double C = iClose(Sym, PERIOD_M5, i); // 在此指定所需的时间框架。

double O = iOpen(Sym, PERIOD_M5, i);

如果(C < O)返回(false)。

}

如果((iBarShift(Sym, 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))

{

如果(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))

{

如果(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))

{

如果(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))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

如果(OrderCloseTime() > time)

{

time = OrderCloseTime()。

price = OrderClosePrice()。

}

}

}

}

return(price)。

}

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

double PriceOpenLastHistOrder(int type = -1)

{

datetime time = 0;

双倍价格=0。

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

{

如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

如果(OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

如果(OrderCloseTime() > time)

{

time = OrderCloseTime()。

price = OrderOpenPrice()。

}

}

}

}

return(price)。

}

 

你好!

如何确定一个头寸是否 在TP上关闭?我认为OrderClosePrice()==OrderTakeProfit()的使用 是不正确的。