[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 476

 
AA! 2012.10.30 14:07:08 2012.06.05 05:30 EA EURUSD,M30: las llamadas dll no están permitidas; 'user32.dll'-'keybd_event' Creo que lo he resuelto. ¿Cómo puedo desbloquear la dll?
 
No, ¡¡¡parece que está bien!!!
 
¡¡¡Los búferes son siempre 0 en la prueba !!! Al diablo, lo probaré en el real - escribiré un ciclo hacia adelante 200 barras hacia atrás, ¡y buscaré puntos de entrada!
 
Disculpe, llevo media hora buscando dónde están mis paréntesis desequilibrados, ¿o qué significa esto? Puse las impresoras y aquí vamos... No compila, pero jura que '\ end_of_program' - paréntesis izquierdo desequilibrado C:\Alpari\experts\customer.mq4 (94, 1)
 
Aquí, lo siento... He vuelto a comprobar los soportes ocho veces... ¡están equilibrados! ¡Equilibrado! ¿O no?
//+------------------------------------------------------------------+
//|                                                     советник.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:
Lo siento, he estado buscando durante media hora paréntesis que están desequilibrados. Acabo de poner las huellas y ahí tienes... No compila, pero jura que '\ end_of_program' - paréntesis izquierdo desequilibrado C:\Alpari\experts\customer.mq4 (94, 1)

a primera vista, falta la última llave (para main())

Su código termina con una ramificación

  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(); }

ps esto es para el código de arriba

 
¡¡¡Gracias!!! Será mejor que eche un vistazo al código... También conté los paréntesis uno a uno en un papel - ¡¡¡equilibrado!!!
 
¿Dónde está la ramificación? O soy un estúpido... Quiero decir, ¡acabamos de abrir una orden bajo las condiciones!
 
drknn:

...

Tienes una forma complicada de llegar a la verdad. Estoy seguro de que si formulan el problema en sí a la gente, les dirá una forma más sencilla de resolverlo.

P.D.

De todas las soluciones a un problema, la más fácil es siempre la más difícil de encontrar, porque para hallarla hay que reciclar y rebuscar entre un montón de basura. Así que, siéntase libre de formular - una solución simple no significa una solución rápida. Quizá la gente de aquí te ahorre más de un día de tu vida.


Bien. Intentaré daros la esencia del problema, quizás alguien os dé una pista o me ayude a facilitar la solución.

Trabajamos en el gráfico de 1 minuto. Tomamos la barra de un minuto (high+low/2 - valor medio de la barra) en el gráfico del 29/10/12 a las 00:00 - este será el punto de partida.

Luego comprobamos la desviación de este precio hacia arriba en 10 pips (cada desviación correcta es +1).

Cuando alcanzamos la desviación de 10 puntos desde el punto de partida - el contador +1; y empezamos a comprobar otras desviaciones, pero desde el punto, donde alcanzamos la desviación de 10 puntos, y esperamos la siguiente subida de 10 puntos en el precio.

Por ejemplo, obtenemos:

Si (punto de inicio) + 10 pips<= precio (utilizamos todos los precios posteriores de las barras desde el punto de inicio.) Obtenemos un contador = contador +1; y comenzamos el punto de inicio ya desde este punto -(punto de inicio + 10 pips).

Si (punto de inicio + 10 pips) +10 pips <= precio (se utilizan todos los precios posteriores de las barras desde el punto de referencia) obtenemos contador=Contador+1; y partimos de este punto-(punto de inicio + 10 pips) +10 pips.

Si(punto de inicio+ 10 pips+ 10 pips) + 10 pips <= precio (utilizamos todos los precios posteriores de las barras desde el punto de referencia.) obtenemos contador=Contador+1; y partimos de este punto -(punto de inicio + 10 pips+ 10pips) + 10 pips.

y así sucesivamente...

Hasta llegar a un contador de 10(contador == 10).

Y cada nuevabarra formadade 1 minuto (alto+bajo/2 - valor medio de la barra) comprobamos esta condición y esperamos hasta que el contador llegue a10 (contador == 10). Supongamos que han pasado dos días, cada nueva barra que se forma la comprobamos y cambiamos si las condiciones son correctas .....

Y cuando llegamos al contador =10 - emitimos el mensaje de que "Contador == 10". Fijamos el punto de partida 2 días antes del fijado originalmente por el usuario, es decir, del29/10/12 a las 00:00 al 31/10/12 a las 00:00 y repetimos el ciclo.

Repite el ciclo y avanza así por el programa.

Es decir, debemos tomar las barras recién formadas y dibujar(alto+bajo/2 - valor medio de la barra). Y comprueba las condiciones y, si son correctas, cámbialas como se ha descrito anteriormente.

¡He intentado implementarlo a través de un array, es muy confuso y da valores erróneos! ¡Ayúdame a implementar este algoritmo!

 
Dimka-novitsek:
Aquí, lo siento... Volví a comprobar los soportes ocho veces... ¡están equilibrados! ¡Equilibrado! ¿O no?


En este código:

            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)); }

mueve las comillas (las que están al final de la línea).

Razón de la queja: