[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 476

 
AA! 2012.10.30 14:07:08 2012.06.05 05:30 EA EURUSD,M30: dll调用不允许;'user32.dll'-'keybd_event'我想我搞清楚了。我怎样才能解锁Dll?
 
不,它看起来很好!!!。
 
缓冲区在测试中总是为0!!。让它见鬼去吧,我将在真实的情况下进行测试--我将向后写一个200条的正向循环,我将寻找入口点!
 
对不起,我已经找了半个小时,想知道我的括号哪里不平衡了,或者这是什么意思?我把指纹放进去了,这里有...它没有编译,但它发誓'\end_of_program' - 不平衡的左括号 C:\Alpari\experts\customer.mq4 (94, 1)
 
在这里,我很抱歉...我重新检查了八次括号 -- 好吧,它们是平衡的!"。均衡的!或者他们是吗?
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot=1;                          
  extern int taymfreym=0 ;                           
  extern double  stoplos=20 ;                          
  extern double  takeprofit=50 ; 
  extern double  magicnumber=350 ;                          


void BreakPoint(){if (!IsVisualMode()) return(0);keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  init " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {Print (   "  Начало " ); 
//----
for( int A=0; A<100 ; A++){
            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
            int BUY=0,SELL=0;int ticket; 
            Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
            
    
            
            for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );}    } }
         
   if (strela1>strela2&&BUY==0&&SELL==0)    {    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
          NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 

 
            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
           NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError()  ,"  Bid ",Bid,
   "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", NormalizeDouble( Ask- (stoplos*Point),Digits),
  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble( Bid+( takeprofit*Point),Digits); }
            
 
   if (strela1>strela2&&BUY==0&&SELL!=0){ 

         OrderSelect(ticket, SELECT_BY_TICKET);
       OrderClose(  ticket , OrderLots( ) , OrderOpenPrice( ) , 3, CLR_NONE);                 
       OrderSend(Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits), 
       NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
       Print( "strela1>strela2&&BUY==0&&SELL!=0 " , GetLastError());BreakPoint(); }
            

  if (strela1<strela2&&SELL==0&&BUY!=0){ 
   OrderSelect(ticket, SELECT_BY_TICKET);
   OrderClose(  ticket , OrderLots( ) , OrderOpenPrice( ) , 3, CLR_NONE);                 
   OrderSend(Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1<strela2&&SELL==0&&BUY!=0 " , GetLastError());BreakPoint(); }
      
      
            
     } Print (   "  Конец " );      
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Dimka-novitsek:
对不起,我已经找了半个小时的支架,这些支架是不平衡的。我只是把指纹放进去,然后就可以了......它没有编译,但它发誓'\end_of_program' - 不平衡的左括号C:\Alpari\experts\customer.mq4 (94, 1)

乍一看,最后一个大括号(用于main())不见了。

你的代码以一个分支的

  if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( NULL, OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError());BreakPoint(); }

这是为上述代码准备的

 
谢谢你!!!。我最好看一下代码...我还在一张纸上一个一个地数着括号--平衡!!!。
 
分支点在哪里?还是我很笨...我的意思是,我们只是在条件下开了一个订单!
 
drknn:

...

你有一个复杂的方法来了解真相。我相信,如果你向人们提出问题本身,他将告诉你一个更简单的解决方法。

P.S.

在所有解决问题的方法中,最简单的方法总是最难找到的,因为为了找到它,你必须回收和筛选一堆垃圾。因此,请自由制定--简单的解决方案并不意味着快速解决。也许这里的人将拯救你的生命不止一天。


好的。我试着把问题的要点告诉你,也许有人会给你一个提示或帮助我使它更容易解决。

我们在1分钟图上工作。我们取29/10/12的00:00图表上的一分钟柱状物(高+低/2-柱状物的平均值)--这将是起点。

然后我们检查与此价格向上的偏差10个点(每个正确的偏差是+1)。

当我们达到与起点的10点偏差时--+1计数器;我们开始检查进一步的偏差,但从我们达到10点偏差的地方开始,并等待价格的下一个10点上涨。

例如,我们得到。

如果(起始点)+10点<=价格(我们使用从起始点开始的所有条形的后续价格。)我们得到一个计数器=计数器+1;并且我们已经从这个点-(起始点+10点) 开始起始点。

如果 起始点+10)+10点<=价格(使用从参考点开始的所有后续条形价格),我们得到counter=Counter+1;并且我们从这个点开始-起始点+10)+10点。

如果(起始点+10+10)+10点<=价格(我们使用从参考点开始的所有条形的后续价格。)我们得到counter=Counter+1;并且我们从这个点开始-(起始点+10+ 10点)+10点。

等等...

直到我们达到一个10的计数器(计数器==10)。

每一个新形成的1分钟条形图(高+低/2-条形图的平均值),我们都要检查这个条件,并 等到计数器达到10(计数器==10假设两天过去了,每形成一个新的柱状物,我们就检查并转移,如果条件正确的话.....。

当我们达到counter =10时 - 我们输出 "Counter == 10 "的信息。我们将起点比用户最初定义的点提前2天,即从29/10/12的00:00移动到31/10/12的00:00,并重复循环

重复这个循环,就这样在时间表中移动。

也就是说,我们应该把新形成的条形图画出来(高+低/2-条形图的平均价值)。并检查条件,如果是正确的,就按上述方法移位。

我曾试图通过一个数组来实现它,但它非常混乱,并给出了错误的值帮助我如何实现这个算法!?

 
Dimka-novitsek:
在这里,我很抱歉...我重新检查了八次支架--好吧,它们是平衡的!"。均衡的!或者他们是吗?


在这个代码中。

            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

移动倒置的逗号(即行尾的逗号)。