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

 
¡Buenos días! La condición no funciona
bool CCInapravlenie=false;
if( CCI_50S>100&&CCI_50<100 ||CCI_50S>0&&CCI_50<0|| CCI_50S>-100&&CCI_50<-100 )CCInapravlenie=true;

if(CCInapravlenie){ imja = DoubleToStr(Time[0], 0); 
ObjectCreate(imja, 22, 0, iTime(NULL,0,0),iLow(NULL,0,0)-0.0001);ObjectSet(imja, OBJPROP_ARROWCODE, 241);
ObjectSet(imja, OBJPROP_COLOR , Yellow); // стрелка жолтая 
}//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Ya he mirado la cadena ife, la he mirado, la he mirado, la he mirado.... Debe haber alguna razón, puede que me confunda y no vea algo simple y elemental, eso pasa.

He mirado por la mañana. Salí. Volví y miré de nuevo. Ahora es más fácil, si, más, menos... No lo entiendo en absoluto.



Y esto es bajo mi inicio.
double EMA_10 = iMA( NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, 0);
double EMA_20 = iMA( NULL , 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
double LMA_100 =iMA( NULL , 0, 100, 0, MODE_LWMA, PRICE_CLOSE, 0);
double МА_30 = iMA( NULL , 0, 30, 0, MODE_SMA, PRICE_CLOSE, 0);
double CCI_50 = iCCI( NULL, 0, 50, PRICE_CLOSE, 0);

double EMA_10S = iMA( NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, 1);
double EMA_20S = iMA( NULL , 0, 20, 0, MODE_EMA, PRICE_CLOSE, 1);
double LMA_100S =iMA( NULL , 0, 100, 0, MODE_LWMA, PRICE_CLOSE, 1);
double МА_30S = iMA( NULL , 0, 30, 0, MODE_SMA, PRICE_CLOSE, 1);
double CCI_50S = iCCI( NULL, 0, 50, PRICE_CLOSE, 1);


p.d. Todo es parte de esta condición de estrategia

EMA - período 10 cruza de arriba a abajo EMA - período 200 , CCI cruza 0.100 o 100 de arriba a abajo; Vela cierra o está por debajo de LMA - período 100
 
TheXpert:
0x es exactamente el número de 16 dígitos.

Gracias.
 

No hay flechas amarillas en absoluto. El diablo lo sabe. ¡¡¡¡Y aunque la condición de zirk funciona!!!!

Condición de Zirk.

bool napravlenieCCI=false;
 if( CCI_50S<100&&CCI_50>100 ||CCI_50S<0&&CCI_50>0|| CCI_50S<-100&&CCI_50>-100  )napravlenieCCI=true;
  if(napravlenieCCI){  string imja = DoubleToStr(Time[0], 0);
  ObjectCreate(imja, 22, 0, iTime(NULL,0,0),iHigh(NULL,0,0)+0.0004); 
  ObjectSet(imja, OBJPROP_ARROWCODE, 242);
  Print(" ObjectSet242  ", GetLastError());
  ObjectSet(imja, OBJPROP_COLOR , Red);Print(" сOBJPROP_COLO  ", GetLastError());}

Captura de pantalla

 
TarasBY:

No se rellena el índice 0 de las matrices de indicadores,

se refiere a ella:

Está un poco (estructuralmente) torcido, pero servirá para la primera vez. Mi consejo: "Acostúmbrate enseguida a los enfoques correctos para escribir código. Por ejemplo, utilice esta condición en su código:

Es analfabeto, porque tarde o temprano, usted dejará el probador para operar en línea y varios EAs pueden estar funcionando en paralelo, y este código no funcionará.


Gracias por su respuesta.

Lo sabré yo. Deberías estudiar más las matrices.

Escribí la condición "Total==0" sólo para comprobar rápidamente mi idea en la práctica. Ahora voy a buscar en la Base de Código y tratar de encontrar algo similar para arreglar esta condición.

Estoy absolutamente de acuerdo contigo. Debes aprender a escribir código correctamente. Me corregiré.

Muchas gracias por su ayuda.



 
Vinin:

¿Qué no te gusta de iHighest() y iLowest()?


No conocía estas funciones. Los probaré ahora.

Gracias por la información.

 
TheXpert:
0x es exactamente el número de 16 dígitos.

El hexadecimal se refiere a ambos. Por ejemplo, 0x0000 en C, 0000H en ensambladores.
 

Hola.

¿Pueden decirme cómo puedo añadir la información que recibo al expediente? Es decir, si obtengo un número, es necesario escribirlo en el archivo, al final del mismo, sin borrar todo su contenido.

Parece que FileWriteString pero por alguna razón se escribe al vacío en lugar de lo que hay... ¿alguien puede darme un ejemplo de cómo hacerlo bien?

... Además, la grabación se hace, si se hace, en una codificación incomprensible que es ilegible -((

Gracias.

 
TarasBY:

No se rellena el índice 0 de las matrices de indicadores,

se refiere a ella:

Está un poco (estructuralmente) torcido, pero servirá para la primera vez. Mi consejo: "Acostúmbrate enseguida a los enfoques correctos para escribir código. Por ejemplo, utilice esta condición en su código:

Porque tarde o temprano, usted dejará el Probador de Estrategias y pasará a operar en línea, donde varios EAs se ejecutan en paralelo y este código no funcionará.


Por lo que tengo entendido, tengo que volver a hacerlo de esta manera:

double L_1= iCustom(NULL,0,"Go_go",K,0,1);  //Линия минимума
double L_2= iCustom(NULL,0,"Go_go",K,1,1);  //Линия максимума 

Otra vez el mismo problema. Cuando lanzo el Asesor Experto, abre una orden de VENTA inmediatamente.

¿Puede explicar por qué?

 
Pacman:


Por lo que tengo entendido tengo que rehacerlo así:

Otra vez el mismo problema. Cuando ejecuto el Asesor Experto, inmediatamente abre una orden de VENTA.

¿Puede explicar por qué?

Reemplazar:

  double L_1= iCustom(NULL,0,"Go_go",K,0,0);  //Линия минимума
  double L_2= iCustom(NULL,0,"Go_go",K,1,0);  //Линия максимума 

Para:

  double L_1= Low[iLowest (NULL, 0, MODE_LOW, K, 1)];;    //Значение минимума
  double L_2= High[iHighest (NULL, 0, MODE_HIGH, K, 1)];;  //Значение максимума 

Y por qué se abre una orden de VENTA (en su versión) (en base a lo que he dicho antes), ¡¡¡encuentra la respuesta tú mismo!!!

 

Pongo banderas para la dirección de la operación. Condición: Si llega a una zona entre las líneas, entonces comprar y no vender, si llega a otra zona, entonces no comprar y vender. Regulo este proceso con líneas horizontales.

extern bool    Покупать  = false;
extern bool    Продавать = false; 


   if ( pcb < Ask && Ask < pl )       // Если Аск цены попал в зону между Уровнем и КлозеБай,
    {                             
     Покупать = false;                // останавливаем покупку
     Продавать = true;
    }
   if ( pl < Bid && Bid < pcs )       // Если Бид цены попал в зону между Уровнем и КлозеСелл,
    {                            
     Продавать = false;               // останавливаем продажи (контрольный флаг)
     Покупать = true;
    }
   if ( pl < Bid && Bid < pb )        // Если Бид цены попал в зону между Уровнем и Покупкой,
    {                                 // начинаем покупать
     Покупать = true;
    }
   if ( pl > Ask && Ask > ps )        // Если Аск цены попал в зону между Уровнем и Продажей,
    {                                 // начинаем продавать
     Продавать = true;             
    }

Antes de eso pido los precios de las líneas expuestas. Y después un bloque de colocación o cierre de órdenes - según la bandera.

El código es trivial. Pero... - Pregunta...

Cuando este diseño empieza a funcionar, los valores de compra y venta resultan ser imprevisibles (caóticos). ¿Por qué ocurre esto? Porque hay condiciones claras para la función "si" y los operadores "fin" y "más/menos".

Es decir, el programa se comporta según sus propias razones: compra, vende o no hace nada, independientemente de lo que esté escrito en los valores de las variables.


¿Cómo y qué tengo que escribir para que las condiciones funcionen y, sobre todo, para que funcionen? ¿Qué estoy haciendo mal y qué no estoy teniendo en cuenta? (Creo que he mencionado todo lo que necesito en las condiciones de la función).


También hay otra cuestión en este tema: cuando las variables cambian en función de las condiciones, sus valores en la configuración del Asesor Experto (cuando se accede a ellos a través de F7) serán los mismos que fueron establecidos por el usuario. Por lo tanto, no es posible ver los valores actuales de estas variables. ¿Cómo podemos hacer para que podamos ver cuáles son sus valores en este momento?

Razón de la queja: