任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1067 1...106010611062106310641065106610671068106910701071107210731074...1178 新评论 [删除] 2016.06.28 09:54 #10661 请帮助我!有2个文件:一个指标和一个专家顾问。如何通过#include正确引用指标中的函数? 由于各种原因,iCustom并不适合。这是我在指标中写的。bool BuyTrue(double& переменная, int переменная) export { //тело функции return(true); } 而这是我在专家顾问中写的内容。#import "НазваниеИндикатора.ex4" bool BuyTrue(double& переменная, int переменная);if (BuyTrue(переменная, переменная)) Opn_B = true;但由于某些原因,专家顾问没有工作,在测试 过程中,指标 没有出现在价格图表中。我写得对吗?如果有错,错在哪里? Nauris Zukas 2016.06.28 10:38 #10662 AlexeyVik:图塔。我没有。但肯定有一个文件在某处,我从它那里得到记录的信息。 ilya_v 2016.06.28 13:39 #10663 请帮助我编译到mt4上FileClose'--'void'类型的表达是非法的 TickToCVS~.mq4 84 12 附加的文件: ticktocvsb.mq4 4 kb Alexey Viktorov 2016.06.28 14:36 #10664 abeiks:我没有。但肯定有一个文件在某处,我从里面得到了记录的信息。 我的截图显示菜单来自MetaEditor,而你的截图是来自MT。 [删除] 2016.06.29 05:32 #10665 AlexeyVik:这就是EMPTY_VALUE值寻找它出现的地方。 谢谢你。你已经帮助我解决了这个问题。我的指标在加载时,从第一个条形开始计算,而不是从零开始计算(我是故意的),在零点时,它是根据刻度历史 计算的,而不是根据历史数据。现在,当我改变时间框架,将其附加到图表上并重新启动终端时,我在条形图0上将缓冲区数值重置为零,问题解决了。 Nauris Zukas 2016.06.29 06:07 #10666 AlexeyVik: 我的截图显示菜单来自MetaEditor,而你的截图是来自MT。 对了!谢谢你! Nauris Zukas 2016.06.29 10:26 #10667 如果该订单已被触发,我怎样才能在历史中获得订单的开盘价,而不是未结头寸的价格?在所附的函数中,如果一个订单已经触发,这个订单只能在头寸中找到,所以它不起作用。而在头寸中,我们只有未结 头寸的价格,而没有订单的价格。double GetPriceLastCloseOrder(string sy="", int mn=-1) { datetime t=0; int i, k=OrdersHistoryTotal(); double r=0; if (sy==NULL) sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) { if (OrderType()>1 && OrderType()<6) { if (t<OrderCloseTime()) { t=OrderCloseTime(); r=OrderOpenPrice(); } } } } } return(r); } Sergei Noga 2016.06.29 12:37 #10668 大家好,我的问题是,我不能修改一个订单。 有两个方面,我不明白修改的数学原理,请给我解释。在我看来,SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS第二方面。从XBMS视频中了解到的情况我没有尝试在测试器中改变变量的值,因为130没有正确的止损和这样的狗屎。2016.06.28 21:42:23.402 2016.06.23 00:00 交易RSI输入:Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087。虽然有一个从数字和函数的乘法的情况下,错误的SL外置双Lots = 0.1。外来的int Slippage = 10;外来的int StopLoss = 10;外置 int TakeProfit =30;外部int RSIPeriod = 7;外来int Magic =1087;双重MaRSI。int TP,SL;bool tfu;//+------------------------------------------------------------------+//|专家初始化功能|//+------------------------------------------------------------------+int OnInit(){如果(Digits == 3||Digits == 5){滑移*=10。TakeProfit *= 10。StopLoss *= 10;}return(INIT_SUCCEEDED)。}//+------------------------------------------------------------------+//|专家去初始化函数|//+------------------------------------------------------------------+空白的OnDeinit(const int reason)。{}//+------------------------------------------------------------------+//|专家勾选功能|//+------------------------------------------------------------------+空白的OnTick(){//+------------------------------------------------------------------+//开放销售//+------------------------------------------------------------------+MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1)。如果(CountTrades() <= 0&MaRSI<=30 ){如果( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0, "test",Magic,0,Green){ int ticket = OrderTicket();SL = NormalizeDouble( Ask - StopLoss*Point,Digits);TP = NormalizeDouble( Ask + TakeProfit*Point,Digits)。ModifyOrder(ticket,OrderOpenPrice(),SL,TP,0,Black)。}}//如果(CountTrades <= 0&MaRSI>=70 )//+------------------------------------------------------------------+//开放购买//+------------------------------------------------------------------+}//ONTICK//+------------------------------------------------------------------+//+订单计数器//+------------------------------------------------------------------+int CountTrades (){int count = 0。for(int i = OrdersTotal()-1;i>=0;i--){if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//如果该订单是我们的count++;//增加计数器}//按索引选择顺序}// order.i===================第一顺序。return(count);//返回订单的数量。}//功能//+------------------------------------------------------------------+//具有错误处理功能的订单放置功能//+------------------------------------------------------------------+int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE){int err = GetLastError()。err =0。bool exit_cikl = false。int ticket = -1;int Retry = 10; //尝试设置一个订单的次数int cnt = 0; //try count如果(cmd == OP_BUY || cmd == OP_SELL){while(!exit_cikl){ticket = OrderSend(symbol,cmd,volume,price,slipage,stoploss,takeprofit,comment,magic,expiration,arrow_color);err= GetLastError()。switch(err){case ERR_NO_ERROR:exit_cikl = true。突破。{ case ERR_SERVER_BUSY:case ERR_NO_CONNECTION:case ERR_INVALID_PRICE:case ERR_OFF_QUOTES:case ERR_BROKER_BUSY:case ERR_TRADE_CONTEXT_BUSY:cnt++。突破。case ERR_PRICE_CHANGED:case ERR_REQUOTE:RefreshRates()。继续。默认情况下。exit_cikl = true。突破。}// switch switch(err)如果(cnt > Retry)exit_cikl = true。if(!exit_cikl){睡眠(1000)。RefreshRates()。}//如果我们不退出循环 if(!exit_cikl)否则{if(err != ERR_NO_ERROR){Print("Error : " + IntegerToString(err))。}//如果仍然有错误 if(err != ERR_NO_ERROR)}//其他如果(err==ERR_NO_ERROR){如果( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) ==true)return(ticket)。}// 如果(err==ERR_NO_ERROR)Print("Error opening order after " + IntegerToString(cnt) +"attempts");返回(-1)。} //循环,而}//如果订单类型是买或卖return(ticket)。}//SendOrder函数//-------------------------------------------------------------------------------------------------------------//修改订单的功能//------------------------------------------------------------------------------------------------------------修改订单(int ticket,double price,double stoploss,double takeprofit,datetime expiration,color arrow_color){如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){price = NormalizeDouble(price,Digits);stoploss = NormalizeDouble(stoploss,Digits);takeprofit = NormalizeDouble(takeprofit,Digits)。CheckValidStop(Symbol(),price,stoploss);//改变最小止损的函数。int err = GetLastError()。err = 0 ;int Retry = 10;int cnt = 0。bool exit_cikl = false。bool result。while(!exit_cikl){结果 = OrderModify(ticket, price,stoploss,takeprofit,expiration, arrow_color)。err = GetLastError()。if(result == true){Print("Order #"+ IntegerToString(ticket), "successful modified");return(true)。}switch(err){case ERR_NO_ERROR:exit_cikl = true。突破。{ case ERR_SERVER_BUSY:case ERR_NO_CONNECTION:case ERR_INVALID_PRICE:case ERR_OFF_QUOTES:case ERR_BROKER_BUSY:case ERR_TRADE_CONTEXT_BUSY:cnt++。突破。case ERR_PRICE_CHANGED:case ERR_REQUOTE:RefreshRates()。继续。默认情况下。exit_cikl = true。突破。}// switch switch(err)}// while(!exit_cikl)if ( err != ERR_NO_ERROR){Print("Error modifying order # " + IntegerToString(ticket))。Print("错误代码。" + IntegerToString(err))。}}//(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))否则{Print("Order selection failed, ticket = " + IntegerToString(ticket));return(false)。}//如果出了问题return(true)。}//函数修改//----------------------------------------------------------------------------------------------------//ChtckValidStop//--------------------------------------------------------------------------------------------------空白 检查有效止损(string symbol,double price,double& sl){如果(sl==0)返回。double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)。如果(MathAbs(price-sl) <= min_stop_server){如果(价格>sl)sl = 价格 - min_stop_server。否则sl = sl + min_stop_server。}// 如果(MathAbs(price-sl) <= min_stop_server)sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS))}//功能 Any rookie question, so 初学者的问题 MQL5 MT5 MetaTrader Questions from Beginners MQL5 [删除] 2016.06.30 05:05 #10669 交易历史中有两个订单:1) SELL № tic 415 STOPLOSS 1.1000 lot 0.01 2) SELL № tic 418 STOPLOSS 1.1000 lot 0.02 我必须指定变量X=tick,Y=STOPLOSS和B=lot,如果Asc价格等于卖出订单的STOPLOSS。如何将第一个值分配给第一阶,然后再分配给第二阶。对我来说,它总是给第一个订单分配一个值。 Vitalie Postolache 2016.06.30 06:58 #10670 m8akca:交易历史中有两个订单:1) SELL № tic 415 STOPLOSS 1.1000 lot 0.01 2) SELL № tic 418 STOPLOSS 1.1000 lot 0.02 我必须指定变量X=tick,Y=STOPLOSS和B=lot,如果Asc价格等于卖出订单的STOPLOSS。如何将第一个值分配给第一阶,然后再分配给第二阶。对我来说,它总是给第一个订单分配一个值。这个话题是为了帮助那些已经写好东西的人,但它并不像我希望的那样运作。请提交你的代码,以便这里的其他人能够看到问题所在并提供帮助。如果你想按顺序写,这就是它的位置。 1...106010611062106310641065106610671068106910701071107210731074...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
请帮助我!有2个文件:一个指标和一个专家顾问。如何通过#include正确引用指标中的函数? 由于各种原因,iCustom并不适合。这是我在指标中写的。
而这是我在专家顾问中写的内容。
但由于某些原因,专家顾问没有工作,在测试 过程中,指标 没有出现在价格图表中。我写得对吗?如果有错,错在哪里?
图塔。
我没有。但肯定有一个文件在某处,我从它那里得到记录的信息。
请帮助我编译到mt4上
FileClose'--'void'类型的表达是非法的 TickToCVS~.mq4 84 12
我没有。但肯定有一个文件在某处,我从里面得到了记录的信息。
这就是EMPTY_VALUE值
寻找它出现的地方。
我的截图显示菜单来自MetaEditor,而你的截图是来自MT。
大家好,我的问题是,我不能修改一个订单。 有两个方面,我不明白修改的数学原理,请给我解释。
在我看来,SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS
第二方面。从XBMS视频中了解到的情况
我没有尝试在测试器中改变变量的值,因为130没有正确的止损和这样的狗屎。
2016.06.28 21:42:23.402 2016.06.23 00:00 交易RSI输入:Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087。
虽然有一个从数字和函数的乘法的情况下,错误的SL
外置双Lots = 0.1。
外来的int Slippage = 10;
外来的int StopLoss = 10;
外置 int TakeProfit =30;
外部int RSIPeriod = 7;
外来int Magic =1087;
双重MaRSI。
int TP,SL;
bool tfu;
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int OnInit()
{
如果(Digits == 3||Digits == 5)
{
滑移*=10。
TakeProfit *= 10。
StopLoss *= 10;
}
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//|专家去初始化函数|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
}
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
//+------------------------------------------------------------------+
//开放销售
//+------------------------------------------------------------------+
MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1)。
如果(CountTrades() <= 0&MaRSI<=30 )
{
如果( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0, "test",Magic,0,Green)
{ int ticket = OrderTicket();
SL = NormalizeDouble( Ask - StopLoss*Point,Digits);
TP = NormalizeDouble( Ask + TakeProfit*Point,Digits)。
ModifyOrder(ticket,OrderOpenPrice(),SL,TP,0,Black)。
}
}//如果(CountTrades <= 0&MaRSI>=70 )
//+------------------------------------------------------------------+
//开放购买
//+------------------------------------------------------------------+
}//ONTICK
//+------------------------------------------------------------------+
//+订单计数器
//+------------------------------------------------------------------+
int CountTrades ()
{
int count = 0。
for(int i = OrdersTotal()-1;i>=0;i--)
{
if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//如果该订单是我们的
count++;//增加计数器
}//按索引选择顺序
}// order.i===================第一顺序。
return(count);//返回订单的数量。
}//功能
//+------------------------------------------------------------------+
//具有错误处理功能的订单放置功能
//+------------------------------------------------------------------+
int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,
double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError()。
err =0。
bool exit_cikl = false。
int ticket = -1;
int Retry = 10; //尝试设置一个订单的次数
int cnt = 0; //try count
如果(cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_cikl)
{
ticket = OrderSend(symbol,cmd,volume,price,slipage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
err= GetLastError()。
switch(err)
{
case ERR_NO_ERROR:
exit_cikl = true。
突破。
{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++。
突破。
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates()。
继续。
默认情况下。
exit_cikl = true。
突破。
}// switch switch(err)
如果(cnt > Retry)
exit_cikl = true。
if(!exit_cikl)
{
睡眠(1000)。
RefreshRates()。
}//如果我们不退出循环 if(!exit_cikl)
否则
{
if(err != ERR_NO_ERROR)
{
Print("Error : " + IntegerToString(err))。
}//如果仍然有错误 if(err != ERR_NO_ERROR)
}//其他
如果(err==ERR_NO_ERROR)
{
如果( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) ==true)
return(ticket)。
}// 如果(err==ERR_NO_ERROR)
Print("Error opening order after " + IntegerToString(cnt) +"attempts");
返回(-1)。
} //循环,而
}//如果订单类型是买或卖
return(ticket)。
}//SendOrder函数
//-------------------------------------------------------------------------------------------------------------
//修改订单的功能
//------------------------------------------------------------------------------------------------------------
修改订单(int ticket,double price,double stoploss,double takeprofit,datetime expiration,color arrow_color)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
price = NormalizeDouble(price,Digits);
stoploss = NormalizeDouble(stoploss,Digits);
takeprofit = NormalizeDouble(takeprofit,Digits)。
CheckValidStop(Symbol(),price,stoploss);//改变最小止损的函数。
int err = GetLastError()。
err = 0 ;
int Retry = 10;
int cnt = 0。
bool exit_cikl = false。
bool result。
while(!exit_cikl)
{
结果 = OrderModify(ticket, price,stoploss,takeprofit,expiration, arrow_color)。
err = GetLastError()。
if(result == true)
{
Print("Order #"+ IntegerToString(ticket), "successful modified");
return(true)。
}
switch(err)
{
case ERR_NO_ERROR:
exit_cikl = true。
突破。
{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++。
突破。
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates()。
继续。
默认情况下。
exit_cikl = true。
突破。
}// switch switch(err)
}// while(!exit_cikl)
if ( err != ERR_NO_ERROR)
{
Print("Error modifying order # " + IntegerToString(ticket))。
Print("错误代码。" + IntegerToString(err))。
}
}//(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
否则
{
Print("Order selection failed, ticket = " + IntegerToString(ticket));
return(false)。
}//如果出了问题
return(true)。
}//函数修改
//----------------------------------------------------------------------------------------------------
//ChtckValidStop
//--------------------------------------------------------------------------------------------------
空白 检查有效止损(string symbol,double price,double& sl)
{
如果(sl==0)
返回。
double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT)。
如果(MathAbs(price-sl) <= min_stop_server)
{
如果(价格>sl)
sl = 价格 - min_stop_server。
否则sl = sl + min_stop_server。
}// 如果(MathAbs(price-sl) <= min_stop_server)
sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS))
}//功能
交易历史中有两个订单:1) SELL № tic 415 STOPLOSS 1.1000 lot 0.01 2) SELL № tic 418 STOPLOSS 1.1000 lot 0.02
我必须指定变量X=tick,Y=STOPLOSS和B=lot,如果Asc价格等于卖出订单的STOPLOSS。如何将第一个值分配给第一阶,然后再分配给第二阶。对我来说,它总是给第一个订单分配一个值。
交易历史中有两个订单:1) SELL № tic 415 STOPLOSS 1.1000 lot 0.01 2) SELL № tic 418 STOPLOSS 1.1000 lot 0.02
我必须指定变量X=tick,Y=STOPLOSS和B=lot,如果Asc价格等于卖出订单的STOPLOSS。如何将第一个值分配给第一阶,然后再分配给第二阶。对我来说,它总是给第一个订单分配一个值。
这个话题是为了帮助那些已经写好东西的人,但它并不像我希望的那样运作。请提交你的代码,以便这里的其他人能够看到问题所在并提供帮助。
如果你想按顺序写,这就是它的位置。