新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 220

 
danya-asg:

我已经明白了我的错误,但我不明白如何解决它。任务通常是每秒启动一次,但从当前蜡烛开始的时间没有被正确计算。

Seconds()函数 从最后一个已知的tick的数据中输出 秒数,但我需要以某种方式计算在函数被调用 的那一刻,从分钟蜡烛开盘以来的真实秒数,即使在过去几秒钟内根本没有tick。

TimeSeconds (TimeLocal())或( TimeLocal() - Time[0])也不会起作用 因为本地时间可能与服务器相差几秒。如何解决这个问题?


你的OnTimer()每秒钟运行一次

void OnTimer()
{
OnTick(); //-- старт каждую секунду
}
 
Alekseu Fedotov:


你的OnTimer()每秒钟运行一次


但为了使程序正确工作,我需要它每秒钟显示服务器的时间,而这里取决于下一个刻度是否已经到来。如果没有,那么ontimer就会启动,但显示滞后的时间,这就是问题所在。
 

到目前为止,我想出了唯一的办法,但它有点歪。

int sek
void OnTick()
{
if(Seconds() > sek)
sek = Seconds ();
Clicker (); //-- старт каждый тик
}
void OnTimer()
{
sek = TimeSeconds(TimeLocal());
Clicker (); //-- старт каждую секунду
}

而为了做到这一点,我不得不将电脑设置为每10分钟同步一次时间。

 
danya-asg:

到目前为止,我想出了唯一的办法,但它有点歪。

而为了做到这一点,我不得不将电脑设置为每10分钟同步一次时间。


你必须做一个 100-200ms的毫秒级定时器,并完全在其中工作。
秒钟太长了,而且经常滑落。

EventSetMillisecondTimer(200);
GetTickCount();
 

我不知道在开始、中间和最后该怎么做。 问题是在一个指标上做一个猫头鹰,进场后止损拖动2根蜡烛,如果交易与当前趋势相反,那么就关闭交易,开一个反转,以同样的方式逆转止损。我不知道如何使一个恒定的20和80作为进入和退出点。

附加的文件:
f9h46khtl1.png  29 kb
 
novikov433:

我不知道在开始、中间和最后该怎么做。 问题是在一个指标上做一个猫头鹰,进场后止损拖动2根蜡烛,如果交易与当前趋势相反,那么就关闭交易,开一个反转,以同样的方式逆转止损。我不知道如何使恒定的20和80作为进入和退出点。

原谅我,醉酒的白痴......但我要告诉你:如果你如此肯定 "这个TS不会失败",那么是什么阻止了你手动赚取20美元并向自由职业者订购这个EA?我向你保证,那里的大多数正直的人,不会分发这个TS,更不会在任何地方当顾问。
 
Alexey Viktorov:
请原谅我,醉酒的白痴......但我要告诉你:如果你如此肯定 "这个TS不会失败",那么是什么阻止了你手动赚取20美元并在自由职业者上订购这个EA?我可以向你保证,那里的大多数正直的人,不会分发这个TS,更不会在任何地方做顾问......。

我想学习如何制作一个EA。 也许市场会发生变化,我将不得不付出更多,例如,改变一下算法?

我不知道我是否真的能用一些猫头鹰构造器来做,但我更想了解一些基本的功能,比如在某个地方做止损,或者在某些日子订购交易。

我不知道为什么在构造函数中也要做1,2,3等,为什么要用箭头把所有的东西按这个顺序连接起来。 谁来从A到Z教mql 4,而不是像网络大侠们那样创造课程,不解释他们为什么这样做,换句话说,你不会自己做出什么新东西,只能复制他们的代码 ....我的意思是,他们知道什么订单负责什么,他们并没有随意点.....,好吧,让专业人士去做金字塔、动态手数、智能止损;我的任务是不同的--下载所需的过滤器,理解趋势形成的本质。谢谢你的帮助!

 
novikov433:

我想学习如何制作一个EA。 也许市场会发生变化,我将不得不付出更多,例如,改变一下算法?

至于用一些猫头鹰构造器做一个TS的可能性,应该是现实中了解到的基本功能,比如在某个地方做一个停止,或者在某些日子里下令交易。

为ATC写TOR是很现实的,在TOR中指定将评论所有的行 - 你将付出更多一点,但将看到如何和什么工作,然后,逐渐你将在工作代码中进行修改,并观察变化 - 因此开始自我培训。
 
novikov433:...想...了解如何制作一个EA...我想了解如何制作一个EA ......我想了解如何制作一个EA ......但这个EA不应该真的亏损,因为亏损的订单被转移到Breakeven,我只需要等待趋势移动......所以我已经在努力了......
亲爱的novikov433!由于你知道交易机器人 的象征性特征,你在编写交易机器人时必须小心谨慎,你在编写交易机器人时必须小心谨慎!你可以用一个简单的例子。我给我妻子下了一个命令(命令):清晨在市场上买一桶土豆,到10点钟(基本面分析)价格上涨--卖出。但有时一车土豆在10:30到达(新闻)。而价格(在新闻上)立即下降,并持续到一天结束,甚至是整个星期。我设置了止损--如果价格下降了10卢布,我就尽快卖出(按市场价格)。如何改变订单,以避免损失。如果这个变体很有趣--在个人信息中写上你的电子邮件。
 
你好。请帮助我处理在测试器上测试时的一个错误。在测试过程中,在所有的ticks上,我的专家顾问打开了第一个sellstop交易,条件还没有通过,它就删除了。尽管条件没有被触发,但第二个卖出止损点被打开和关闭。然后在日志中出现了试图关闭buy2,订单关闭功能 的未知票。由于我正在工作,可能会出现一些不准确的地方,所以我把代码粘贴出来。订单区间是通常的
Symb=Symbol();                               
   Total=0;                                     
   for(int i=1; i<=OrdersTotal(); i++)          
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if (OrderSymbol()!=Symb)continue;      
         if (OrderType()>1) continue;
         if (OrderType<=1)                     
            {
             Total++;                               
             if (Total>1)                           
               {
                Alert("Несколько рыночных ордеров. Эксперт не работает.");
                return;                             
               }
             Ticket=OrderTicket();                  
             Tip   =OrderType();                    
             Price =OrderOpenPrice();               
             SL    =OrderStopLoss();                
             TP    =OrderTakeProfit();              
             Lot   =OrderLots();                    
            }
        }

闭合块似乎也没有引起多大的问题,条件已经显示是简化的。

while(true)                                  
     {
      if (Tip==0 && Cls_B==true)                
        {                                       
         Alert("Попытка закрыть Buy ",Ticket);
         RefreshRates();                        
         Ans=OrderClose(Ticket,Lot,Bid,2);      
         if (Ans==true)                         
           {
            Alert ("Закрыт ордер Buy ",Ticket);
            break;                              
           }
         return;                                
        }
 
      if (Tip==1 && Cls_S==true)                
        {                                       
         Alert("Попытка закрыть Sell ",Ticket);
         RefreshRates();                        
         Ans=OrderClose(Ticket,Lot,Ask,2);      
         if (Ans==true)                         
           {
            Alert ("Закрыт ордер Sell ",Ticket);
            break;                              // Выход из цикла закр
           }
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

将非常感激。