[¡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 475

 

Hola. Ayúdame a arreglar el código de un EA. El problema en el código es el siguiente: si el precio > o = los niveles prescritos, se abre una operación. El precio puede ser todo lo que quiera > estos niveles, respectivamente, el EA abre un montón de operaciones.

Quieroeliminar el símbolo">"del código y dejar sólo"=". Yo mismo elimino el símbolo ">" pero me da muchos errores al compilar.AYÚDAME.

 
// < 0 - Dn
// > 0 - Up
int Signal()
{
double RSI = iRSI(NULL,15,RSIperiod,RSI_price,SignalBar);
double Stoch = iStochastic(NULL,15,Stoch_K,Stoch_D,Stoch_slowing,Stoch_method,Stoch_price,Stoch_mode,SignalBar);
double CCI = iCCI(NULL,15,CCI_period,CCI_price,SignalBar);

double MA2 = iMA(NULL,15,ma2_period,ma2_shift,ma2_method,ma2_price,SignalBar);
double IchiA = iIchimoku(NULL, 15, tenkan, kijun, senkou_span_b, 3, SignalBar);
double IchiB = iIchimoku(NULL, 15, tenkan, kijun, senkou_span_b, 4, SignalBar); 

    if(GO && SignalType_1 && RSI >= 65 && Stoch >= 80 && CCI >= 100) {GO=false; return(+1);}//запретить повторный вход (+1);
    if(GO && SignalType_2 && Bid >= MA2 && RSI >= 65 && Stoch >= 80 && CCI>=100) {GO=false; return(+1);}//запретить повторный вход return(+1);
    if(GO && SignalType_3 && Bid >= IchiA && RSI >= 65 && Stoch >= 80 && CCI>=100) {GO=false; return(+1);}//запретить повторный вход (+1);
    
   
    
    if(GO && SignalType_1 && RSI <= 35 && Stoch <= 20 && CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    if(GO && SignalType_2 && Ask <= MA2 && RSI <= 35 && Stoch <= 20 && CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    if(GO && SignalType_3 && Ask <= IchiB && RSI <= 35 && Stoch <= 20&& CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    
    if(OrdersTotal()==0)GO=true;
    
    return(0);
}


Esto es parte del código, si necesitas el código completo, lo publicaré.

Gracias de antemano.
 

Poner una línea antes de la comprobación de la condición

if(OrdersTotal()>0)return(0);

He vuelto a mirar y me he dado cuenta de que el código no es tuyo y no tienes ni idea de cómo arreglarlo. Ya tienes todo en tu código, busca el lugar donde coloca las órdenes y por qué ignora la variable GO.

 
Roger:

Poner una línea antes de la comprobación de la condición

if(OrdersTotal()>0)return(0);

Miré de nuevo, lo entendí - el código no es tuyo y no tienes idea de cómo arreglarlo. Ya tienes todo en tu código, busca el lugar donde coloca las órdenes y por qué ignora la variable GO.

El código no es mío, sino que fue escrito para mí según mi asignación técnica y no tengo idea de cómo arreglarlo, por eso lo abordé. Gracias por la respuesta
 

Buenas tardes.

¿Puedes decirme, por favor (en un mensaje privado), dónde están las cotizaciones de los fines de semana?

 

Hola a todos. Necesito ayuda. No sé dónde está el error.

La cuestión es ésta. Establecemos el punto de referencia en el tiempo, digamos 29/10/2012 00:00. Crea un array y pon los valores en él desde el punto de partida hasta el momento actual. Entonces, comprueba las condiciones de desviación de precios que he establecido. Si alcanzamos una desviación ==10. Mostramos un mensaje y cambiamos el punto que habíamos fijado anteriormente a 2 días más adelante. Y repite el procedimiento. El problema es que el siguiente array debe ser repuesto constantemente, digamos que desde un punto 29/10/2012 00:00 no tenemos suficientes valores y cada nueva barra de minutos formada debe ser colocada en él y comprobada y el punto de referencia no se desplaza hasta que las condiciones coincidan ==10 veces. ¡¡¡¡Pero, por alguna razón, en cada tic, comienza a contar los valores de nuevo desde el punto de partida!!!!

¡Ayude a resolver el problema! ¡¡¡GRACIAS A TODOS POR VUESTRA AYUDA!!!

//-----------------------------------------------------------------------------------------------------------------------------------
datetime Tochka_History = D'2012.10.10 17:30';           
double d[];                                            
double a;                                                 
int i;                                                   
int r=0;                                                 
int j=0;                                                  
int c=0;                                                    
datetime time;                                              
int bars;                                                   
string l;
//-----------------------------------------------------------------------------------------------------------------------------------
int start(){
if(j==0){
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Точка отсчета - ",l,"; Счетчик c - ",c);                                                                          
if(TimeCurrent()>=Tochka_History){                                                                                   
bars=iBarShift(NULL,PERIOD_M1,Tochka_History,false);                                                                 
time=iTime(NULL,PERIOD_M1,i);                                                                                                                                            
ArrayResize(d,bars);                                                                                                 
for(i=bars;i>0;i--) d[i]=(iHigh(NULL,PERIOD_M1,i)+iLow(NULL,PERIOD_M1,i))/2;                                        
for(i=bars;i>0;i--) Uslovie();}}}                                                                                     
//-----------------------------------------------------------------------------------------------------------------------------------
void Uslovie(){
if(r==0){a=d[i];r=1;}
if(a+10*Point<=d[i] && r==1){r=0; c=c+1; Alert("Счетчик c - ",c);}
if(c==10){Alert("Значение С достигло 10"); j=1; Smeshenie();}}
//-----------------------------------------------------------------------------------------------------------------------------------
void Smeshenie(){
Tochka_History=Tochka_History+2*24*60*60;
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Новая точка отсчета времени - ",l);
if(TimeDayOfWeek(Tochka_History)==6||TimeDayOfWeek(Tochka_History)==0){
Tochka_History=Tochka_History+1*24*60*60;
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Новая точка отсчета времени, если выпали выходные - ",l);} j=0;}
//-----------------------------------------------------------------------------------------------------------------------------------
 
merkulov.artem:

Hola a todos. Necesito ayuda. No sé dónde está el error.

La cuestión es ésta. Fijamos el punto de referencia en el tiempo, digamos 29/10/2012 00:00. Crea un array y pon los valores en él desde el punto de partida hasta el momento actual. Entonces, comprueba las condiciones de desviación de precios que he establecido. Si alcanzamos una desviación ==10. Mostramos un mensaje y cambiamos el punto que habíamos fijado anteriormente a 2 días más adelante. Y repite el procedimiento. El problema es que el siguiente array debe ser repuesto constantemente, digamos que desde un punto 29/10/2012 00:00 no tenemos suficientes valores y cada nueva barra de minutos formada debe ser colocada en él y comprobada y el punto de referencia no se desplaza hasta que las condiciones coincidan ==10 veces. Pero, por alguna razón, ¡¡¡comienza a contar los valores de nuevo desde el punto de partida en cada tic!!!

¡Ayúdame a resolver este problema! GRACIAS A TODOS POR SU AYUDA

La tercera vez que veo tu petición y nadie reacciona, ¿por qué lo crees? Probablemente la gente no entiende lo que se quiere de ellos.

Si alcanzamos desviaciones ==10. Mostramos un mensaje y desplazamos el punto que habíamos fijado anteriormente en 2 días..... ¡¡¡Pero por alguna razón empieza a recalcular los valores desde el punto de partida en cada tick!!!

Eso es porque tu código no comprueba desde dónde empieza. Así que empieza cada vez desde el punto de partida. Comprueba con tu impresora si hay una desviación de 10 y si realmente se desplaza el punto en 2 días. Si se desplaza en 10 y el waypoint se desplaza en 2 días, entonces antes de introducir la siguiente marca es necesario comprobar, si realmente es necesario introducir el punto de partida o ya está introducido.

Tienes una forma complicada de llegar a la verdad. Estoy seguro de que si formula el problema en sí, le 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.

 

¡¡¡Buenos días!!! Una pregunta superdifícil. ¿Cómo detengo el comprobador cuando llega al lugar correcto del código? No veo nada de eso en la ayuda. No puede ser eso en absoluto, ¡y la función sería valiosa!

2. El comportamiento de la función iCustom. En realidad, la función siempre produce un -1 de impresión (excepto cuando un búfer esquinas del zigzag). Pero en el probador todos ven 0. ¿Por qué esa diferencia?

double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, 1);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, 1);
            
            int BUY=0,SELL=0;int ticket; 
            Print (  " strela1 " , strela1 , "   strela2  " , strela2 );


 
Dimka-novitsek:
¡¡¡Buenos días!!! Una pregunta superdifícil. ¿Cómo detengo el comprobador cuando llega al lugar correcto del código? No veo nada de eso en la ayuda. No puede ser eso en absoluto, ¡y la función sería valiosa!

envíale una pulsación del botón "Pausa/Pausa".

busque un artículo sobre cómo enviarlo.

 
Gracias. Lo buscaré.
 
No puedo con esta emulación de Pause-Break, ¡no funciona!
//+------------------------------------------------------------------+
//|                                                     советник.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 start()
  {
//----

            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, 1);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, 1);
            
            int BUY=0,SELL=0;int ticket; 
            Print (  " strela1 " , strela1 , "   strela2  " , strela2 );BreakPoint();
            
    
            
            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( NULL, 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&&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(); }