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

 
rigonich:

Por cierto, me he preguntado esta cuestión durante mucho tiempo, pero nunca lo he averiguado, simplemente lo he olvidado. ¿De dónde saca el probador los valores de parada? Si los valores reales pueden ser cambiados por el servidor, entonces el resultado de la prueba debería depender de la hora de la prueba, lo cual no es el caso, lo he comprobado. ¿O el valor almacenado en las propiedades del símbolo y el valor dado por el servidor en la solicitud no es el mismo?
Las variables del entorno del mercado están en el archivo de servicio symbols.raw (presumiblemente), que está en la carpeta del historial del servidor. Cuando no hay conexión con el servidor o en los fines de semana, el terminal toma los últimos datos de este archivo.
 
xant:

rigonich

¿Es una especie de broma o algo así? ¿De qué te ríes?

TarasBY

¿No puedes? Entonces no lo hagas.

Escucha, friki de las orejas caídas, te han ayudado, ¡y ni siquiera puedes llevar un código ya hecho a tu Asesor Experto! Y tú acabas de abrir la boca. ¡Al menos puedes explicarle a un idiota! POR.
 

TarasBY

no se está moviendo, gilipollas. Tú eres el raro. Porque ni siquiera puedes articular bien dos palabras en ruso.

¿Es usted un imbécil? Bueno, no necesito torturarte. Descansa un poco.

 
TarasBY:
Las variables del entorno del mercado están en el archivo de servicio symbols.raw (presumiblemente), que se encuentra en la carpeta del historial del servidor. Cuando no hay conexión con el servidor o los fines de semana, el terminal toma los últimos datos de este archivo.


Gracias.
 
xant:

rigonich

¿Es una especie de broma o algo así? ¿De qué te ríes?

TarasBY

¿No puedes? Bueno, no deberías haberlo hecho.

He escrito en ruso - no hay casi nada sobre la declaración de variables globales en el libro de texto. Por ejemplo, no sé qué es fGet_MineGV();

¿Es una función? Si lo es, ¿qué hace? La búsqueda de fGet en el libro de texto produce cero resultados.

¿Qué debo declarar en int init()? Usted ha escrito:

{
fGet_MineGV();
}


Aquí en mi EA la inicialización del init se ve así:

int init()
{
ArrayInitialize(buf3,0);
ArrayInitialize(b1,0);
ArrayInitialize(b2,0);
ArrayInitialize(b3,0);
ArrayInitialize(b4,0);


Comentario("Calcular el valor medio "+ind);
m1=NormalizeDouble(iCustom(NULL,tf,ind+"_a",0,0),2);
string d="Valor medio "+ind+"+DoubleToStr(m1,2);
tm=TimeCurrent();
int q=0,ticket=-1;
doble opr=0,lote1=0;
for(q=0;q<OrdersTotal();q++)
{

y así sucesivamente, 100 líneas más. ¿Adónde, en qué lugar y, sobre todo, qué debo declarar aquí exactamente? ¿Es realmente tan difícil escribir en ruso? Doblemos los dedos, sí.

¿Es una función? Si es así, ¿qué hace? La búsqueda en el libro de texto de fGet da cero resultados.

Sí, esta función, y no puede haber nada sobre ella en el tutorial, no estaba disponible en el momento en que se escribió el tutorial. Esta es una función definida por el usuario, que fue escrita especialmente para usted.

      void fGet_MineGV (string fs_PrefName = ""// префикс имени переменной
       {
        string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
        if (GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
        if (GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
        if (GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
        if (GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
        //----
    }
 
Buenas tardes, un trailing stop funciona inmediatamente después de la colocación de la orden. Y debería funcionar sólo cuando la orden con el tocket de la entrada se moverá a la historia, y se moverá estrictamente en TakeProfit.


//***************************************   
 
  nahodka=false;
 
 
 if (OrderSelect(tocket, SELECT_BY_TICKET , MODE_HISTORY))  
 if (OrderTakeProfit( )-3*Point<profitsell&&OrderTakeProfit( )+3*Point>profitsell) nahodka=true;
     // Находим ордер, сработавший именно по тейкпрофиту 
 
 
  
 if(nahodka){if (OrderSelect(tecket,SELECT_BY_TICKET)){
 if(OrderStopLoss( )>Bid+treylingstop*Point ){ Print ("четвёртаямодифи    " );
 OrderModify(  tecket, OrderOpenPrice(), Bid+treylingstop*Point, OrderTakeProfit(), 0, CLR_NONE);}}}
  // Модифицируем оставшийся ордер
 for ( i = OrdersTotal() - 1; i >= 0; i--)
 

rigonich

Lo hice al principio. Inserté este trozo de código dentro de la función init, lo compilé y obtuve una nota:

Lafunción "fGet_MineGV" no está referenciada y será eliminada del archivo exp.

Esta advertencia es clara para mí porque todavía no hay ningún registro allí, por lo que no puede leer nada, ¿verdad?

Después escribo la segunda parte del código dentro de la función start. Este fragmento tiene el siguiente aspecto

void fSave_MineGV (string fs_PrefName = "") // prefijo del nombre de la variable
{
static datetime ldt_NewBar;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
//---- Guardar al principio de cada minuto
if (ldt_NewBar == ldaTeginBar) return;
ldt_NewBar = ldaTBeginBar;
//---- Guarda los valores de cada variable sucesivamente
string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
GlobalVariableSet (ls_Name, SUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet (ls_Name, SUA1);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3")
GlobalVariableSet (ls_Name, BUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet (ls_Name, BUA1);
}

¿Está todo bien aquí?

Inserto esta parte del código justo después del cálculo de SUA, SUA1, BUA,BUA1.

Pero en la compilación, el Asesor Experto da la siguiente salida:

27 errores, 64 advertencias

 

xant:

rigonich

Lo hice al principio. Inserté este trozo de código dentro de la función init, lo compilé y obtuve una nota:

La función "fGet_MineGV" no está referenciada y será eliminada del archivo exp.

Esta advertencia es clara para mí porque todavía no hay ningún registro allí, por lo que no puede leer nada, ¿verdad?

Después escribo la segunda parte del código dentro de la función start. Este fragmento tiene el siguiente aspecto

void fSave_MineGV (string fs_PrefName = "") // prefijo del nombre de la variable
{
static datetime ldt_NewBar;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
//---- Guardar al principio de cada minuto
if (ldt_NewBar == ldaTeginBar) return;
ldt_NewBar = ldaTBeginBar;
//---- Guarda los valores de cada variable sucesivamente
string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
GlobalVariableSet (ls_Name, SUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet (ls_Name, SUA1);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3")
GlobalVariableSet (ls_Name, BUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet (ls_Name, BUA1);
}

¿Está todo correcto aquí?


Las descripciones de las funciones no se pueden colocar ni en el inicio, ni en el inite, ni en ninguna otra función. Se pueden colocar en medio de su EA, o al principio, o al final, pero no en otras funciones. Sólo debes poner la llamada a la función en el init, puedes ponerla al principio.

Esta observación la tengo clara, porque el registro no se ha creado todavía, no puede contar nada, ¿no? Exactamente, no hay descripción de la función, que el compilador busca donde debe estar - fuera de las funciones pragmáticas.

{

fGet_MineGV();
}

Lo mismo ocurre con la segunda función. Esto es una "cartilla", y es difícil suponer que alguien que hace programación, incluso un principiante, no pueda saber esto.

 
Dimka-novitsek:
El trailing stop funciona inmediatamente después de la colocación de la orden. Y debe funcionar sólo cuando la orden con el billete se moverá a la historia, y se moverá estrictamente por TakeProfit.

Pero, si su historial no está vacío, es casi seguro que encontrará allí una orden activada exactamente en el momento de la toma de beneficios? Aparentemente, no está buscando en el historial una orden cerrada en TP, sino que está comprobando a través del historial cómo se cerró la orden que necesita, y si se cerró del todo. Eso es lo que tiene que comprobar, ¿por qué comprueba exactamente cuál es el precio de cierre de su orden? Tres opciones - 1. precio de cierre==0 - si la orden es de mercado, no está en el historial (OrderSelect() devolverá false) 2. precio de cierre es igual a
OrderTakeProfit()
-- La orden se ha cerrado al precio de parada, 3.
OrderTakeProfit()
-- la orden no se cerró en el stop .
 

rigonich

Veinticinco años otra vez. Pregunté muy específicamente si había dado el primer paso correcto. No has respondido a una pregunta directa, no has dicho una palabra de fondo.

Sí, claro, me leo un libro de texto, pero como tengo una profesión que no tiene nada que ver con la programación, está claro que pido un algoritmo claro, sencillo y concreto. ¿Es difícil de entender? Si le resulta difícil responder sobre el fondo, ¿para qué molestarse? Simplemente vete.

Y como comentario - no tienes ni idea de la cantidad de gente que conozco a la que, como médico de cabecera, puedo llamar estúpida. Es difícil imaginar que los adultos no entiendan cuestiones básicas sobre su propia salud. Si reacciono a todo el mundo como tú, entonces no valdré nada como especialista. Duerme bien.

_______________

Por favor - que alguien me envíe un correo electrónico a neroy(dog)mail.ru que pueda tomar el código de EA y pegar lo que necesita en el lugar correcto.