新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 99 1...9293949596979899100101102103104105106...1953 新评论 Andrei Sokolov 2017.01.29 18:40 #981 Dratuti。你是如何制作这样的面板的? Vitaly Muzichenko 2017.01.29 19:05 #982 Andrey Sokolov: Dratuti。你是如何制作这样的面板的? 以kodobase为例,重新做,有很多顾问的面板可以满足各种口味。它从背景 开始 Artyom Trishkin 2017.01.29 19:07 #983 Andrey Sokolov: Dratuti。你是如何制作这样的面板的? 有了图形化的对象。 Andrei Sokolov 2017.01.29 20:13 #984 Vitaly Muzichenko,Artyom Trishkin 谢谢你们。 Artyom Trishkin 2017.01.29 20:17 #985 Andrey Sokolov:Vitaly Muzichenko,Artyom Trishkin 谢谢你们。 Nzt Artyom Trishkin 2017.01.30 02:50 #986 trader781:继续写另一个猪八戒,在测试仪中也输了,否则我们怎么能长出麋鹿。目前,有一个所需的参数,它应该负责在前一个或多个订单关闭后打开下一个订单的可能性。有两种情况1) 如果该值为真开立订单 过程关闭 并重新开放2) 如果是假的打开订单过程关闭然后做ExpertRemove整个问题是,这两个条件是相互排斥的,但它们必须结合在一个专家顾问中,因为1) 值在开始时设定2)该值在输入和处理条件中被设定,并接受处理(如果为真,则打开)。3) 关闭后,我们设置为假 如果有人对这种事情感兴趣,我很乐意听听我的变种。 我在逻辑上有问题。 这很简单。开立订单处理订单关闭订单检查状况和...如果为真,则ExpertRemove()再一次 Vitaly Muzichenko 2017.01.30 04:27 #987 Artyom Trishkin: 我们在逻辑上有问题。 一切都很简单。开立订单处理订单关闭订单检查条件和...如果为真,则ExpertRemove()再做一次 似乎有些不对劲,如果这是真的--你必须砍一棵卷心菜,而不是去灌木丛) Artyom Trishkin 2017.01.30 04:44 #988 Vitaly Muzichenko: 有些事情似乎不对,如果是真的--你应该是在切卷心菜,而不是在灌木丛中) 错了。假的。我不知道这个测试是什么...妈的,还是有一些逻辑的。还是你只是想聊天? Michail_David 2017.01.30 05:28 #989 请告知。专家顾问不在终端中开立订单。汇编正在进行中,根据图表,订单应该被打开。但他们不是。我把代码附在后面。 double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//确定手的数量。 double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);//当前酒吧的MACD参数。 double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);//前一栏的MACD参数。 double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);//主线的MACD参数偏移2条。 double StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//参数Trailing Stop by ParabolicSAR parameters of the current bar。 double Previous_StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//StopLoss参数由ParabolicSAR的前一棒参数决定。 double PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//parabolicSAR参数的当前栏。 double PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//前一个柱状图的抛物线参数。//+------------------------------------------------------------------+//| 专家勾选功能|//+------------------------------------------------------------------+ 空白的OnTick(){ 静态数据时间New_Time=TimeCurrent();//当前酒吧的时间。 bool New_Bar=false; // 标示新条。 int ticket,total,cnt;//---------------------------------------------------------------------------{ New_Bar=false; // 没有新条形。 if(Time[0]==New_Time) // 比较时间{ New_Bar=true; // New_Bar被捕获。 如果(New_Bar==false) // 如果一个酒吧不是新的 return; // ...然后退出 }} total=OrdersTotal();//确定订单的数量。 如果(total<1){//------没有未结订单 如果((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(), MODE_MARGINREQUIRED)*(MarketInfo(Symbol(), MODE_MINLOT)//检查是否有资金用于开立最小的手数{ Print("没有足够的资金。自由资金=",AccountFreeMargin())。 返回。} //--多头开仓条件(买入) 如果((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)&& PSARCurrent<iOpen(NULL,0,1)){ ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,0,NULL,MAGICNUMBER,0,Green) 。 如果(ticket>0)//检查打开的位置{ 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order open : " ,OrderOpenPrice())。 否则 Print("BUY订单打开错误:",GetLastError())。 返回。}} //--建立空头头寸的条件(卖出)。 如果((MacdCurrent<0 &&MacdPrevious1>=0 &&MacdPrevious2>0)&& PSARCurrent>iOpen(NULL,0,1)){ ticket=OrderSend(Symbol(,OP_SELL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,Red); 如果(ticket>0)//检查打开的位置{ 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Sell order open : ",OrderOpenPrice())。 否则 Print("错误打开卖出订单:",GetLastError())。 返回。}}//---退出 "没有开放订单 "区块 }//---正确入市很重要,但正确出市更重要。 for(cnt=0;cnt<total;cnt++){ if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==MAGICNUMBER && // 检查订单的神奇数字。 OrderSymbol()==Symbol() //检查订单符号。{//---------多头仓位开张 如果(OrderType()==OP_BUY){//---必须关闭? 如果((MacdCurrent<0 &&MacdPrevious1>=0 &&MacdPrevious2>0)&& PSARCurrent>iOpen(NULL,0,1)){//------订单关闭和退出 if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)) Print("OrderClose error",GetLastError())。 返回。}//------------------ 修改订单的止损方式 如果(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0)) if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue)) Print(" 订单修改错误。错误代码=",GetLastError())。 否则 Print("订单的止损价格已被成功修改;) 返回。}} 否则 // 做空 如果(OrderType()==OP_SELL){//---必须关闭? 如果((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)&& PSARCurrent<iOpen(NULL,0,1)){//------订单关闭和退出 if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet)) Print("OrderClose error",GetLastError())。 返回。}//----------------- 修改订单的止损方式 如果(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0)) if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue)) Print("订单修改错误。错误代码=",GetLastError())。 否则 Print("订单的止损价格已被成功修改;) 返回。}}} //------------------------------------------------------------------------------------------------------- Any questions from newcomers 初学者的问题 MQL4 MT4 MetaTrader Questions from Beginners MQL4 Artyom Trishkin 2017.01.30 07:36 #990 trader781:是的,这比那更简单。但如果我们保留这一点作为后备措施,并采取以下措施呢? 检查条件和...如果为真,那么机器人就会以最少的活动挂起,最好是完全没有活动。即如何阻止输入的进一步操作 return(0); 但这是不可取的--它不会处理其他事情。 1...9293949596979899100101102103104105106...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Dratuti。你是如何制作这样的面板的?
Dratuti。你是如何制作这样的面板的?
Dratuti。你是如何制作这样的面板的?
Vitaly Muzichenko,Artyom Trishkin 谢谢你们。
继续写另一个猪八戒,在测试仪中也输了,否则我们怎么能长出麋鹿。
目前,有一个所需的参数,它应该负责在前一个或多个订单关闭后打开下一个订单的可能性。
有两种情况
1) 如果该值为真
开立订单
过程
关闭
并重新开放
2) 如果是假的
打开订单
过程
关闭
然后做ExpertRemove
整个问题是,这两个条件是相互排斥的,但它们必须结合在一个专家顾问中,因为
1) 值在开始时设定
2)该值在输入和处理条件中被设定,并接受处理(如果为真,则打开)。
3) 关闭后,我们设置为假
如果有人对这种事情感兴趣,我很乐意听听我的变种。这很简单。
我们在逻辑上有问题。
一切都很简单。
有些事情似乎不对,如果是真的--你应该是在切卷心菜,而不是在灌木丛中)
请告知。专家顾问不在终端中开立订单。汇编正在进行中,根据图表,订单应该被打开。但他们不是。我把代码附在后面。
double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//确定手的数量。
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);//当前酒吧的MACD参数。
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);//前一栏的MACD参数。
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);//主线的MACD参数偏移2条。
double StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//参数Trailing Stop by ParabolicSAR parameters of the current bar。
double Previous_StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//StopLoss参数由ParabolicSAR的前一棒参数决定。
double PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//parabolicSAR参数的当前栏。
double PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//前一个柱状图的抛物线参数。
//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
静态数据时间New_Time=TimeCurrent();//当前酒吧的时间。
bool New_Bar=false; // 标示新条。
int ticket,total,cnt;
//---------------------------------------------------------------------------
{
New_Bar=false; // 没有新条形。
if(Time[0]==New_Time) // 比较时间
{
New_Bar=true; // New_Bar被捕获。
如果(New_Bar==false) // 如果一个酒吧不是新的
return; // ...然后退出
}
}
total=OrdersTotal();//确定订单的数量。
如果(total<1)
{
//------没有未结订单
如果((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(), MODE_MARGINREQUIRED)*(MarketInfo(Symbol(), MODE_MINLOT)
//检查是否有资金用于开立最小的手数
{
Print("没有足够的资金。自由资金=",AccountFreeMargin())。
返回。
}
//--多头开仓条件(买入)
如果((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,0,NULL,MAGICNUMBER,0,Green) 。
如果(ticket>0)//检查打开的位置
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order open : " ,OrderOpenPrice())。
否则
Print("BUY订单打开错误:",GetLastError())。
返回。
}
}
//--建立空头头寸的条件(卖出)。
如果((MacdCurrent<0 &&MacdPrevious1>=0 &&MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(,OP_SELL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,Red);
如果(ticket>0)//检查打开的位置
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order open : ",OrderOpenPrice())。
否则
Print("错误打开卖出订单:",GetLastError())。
返回。
}
}
//---退出 "没有开放订单 "区块
}
//---正确入市很重要,但正确出市更重要。
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICNUMBER && // 检查订单的神奇数字。
OrderSymbol()==Symbol() //检查订单符号。
{
//---------多头仓位开张
如果(OrderType()==OP_BUY)
{
//---必须关闭?
如果((MacdCurrent<0 &&MacdPrevious1>=0 &&MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
//------订单关闭和退出
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error",GetLastError())。
返回。
}
//------------------ 修改订单的止损方式
如果(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print(" 订单修改错误。错误代码=",GetLastError())。
否则
Print("订单的止损价格已被成功修改;)
返回。
}
}
否则 // 做空
如果(OrderType()==OP_SELL)
{
//---必须关闭?
如果((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
//------订单关闭和退出
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error",GetLastError())。
返回。
}
//----------------- 修改订单的止损方式
如果(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("订单修改错误。错误代码=",GetLastError())。
否则
Print("订单的止损价格已被成功修改;)
返回。
}
}
}
//-------------------------------------------------------------------------------------------------------
是的,这比那更简单。
但如果我们保留这一点作为后备措施,并采取以下措施呢?
检查条件和...即如何阻止输入的进一步操作