Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 206

 
mikhail12:

Pero si se reabre, la posición se reduce por el importe del diferencial.

Bueno, eso sería una perversión particularmente limpia. No lo creo.
 
tara:

Bueno, eso sería una perversión particularmente elegante. No lo creo.

Sí, ya lo he comprobado, creo... si no fuera así, podrías mantener una venta autsraelí en una cuenta islámica, y una compra en una cuenta spread. Habría beneficios estables... más que en el banco
 

1. Situación de cierre parcial de una orden - se cambia el ticket, y se escribe en el comentario a la nueva orden, está claro, se puede sacar.
2. La situación de algunos corredores cuando transfieren una posición a través de la noche/fin de semana, cierran la posición y la abren de nuevo al comienzo del día, ¿cómo se comporta la entrada en este caso? El billete antiguo se escribe en el comentario de la nueva posición, no pasa nada? ¿Cómo se puede hacer un seguimiento de los pedidos si hay más de 4-8?

 
Vladislav: deberías haber borrado el post, imho.
 
artmedia70:


datetime es lo mismo que int



Me hizo pensar: estaba seguro de que datetime era un int sin signo, lo comprobé y tenías razón. Resulta que MT4 no vivirá más allá de 2038 ;). Todavía hay tiempo )))))))))))))))))))))))).
 
tara:
Vladislav: no deberías haber borrado el post, imho.


No para nada, IMHO, por supuesto: datetime es realmente int. Aunque, todo lo escrito es correcto en general, pero no en este caso. Aquí no puedo entender la lógica de los desarrolladores de ICL (((((((((((((. Quizá lo corrijan en una nueva versión del idioma.

HH el significado del post borrado era que los tipos deben ser utilizados como se pretende, de lo contrario se puede correr en errores de ejecución. En este caso para la fecha es mejor datetime, no int, porque hay una esperanza, que el desajuste de los tipos se corregirá.

 
VladislavVG:


No para nada, IMHO, por supuesto: datetime es realmente int. Aunque, todo lo que se ha escrito es correcto en general, pero no en este caso. No puedo entender la lógica de los desarrolladores de ICL aquí (((((((((((((. Quizá lo corrijan en una nueva versión del idioma.

SZ el sentido del post borrado era que los tipos deben ser utilizados como se pretende, de lo contrario se puede encontrar con errores de ejecución. En este caso, para la fecha es mejor datetime, pero no int, porque hay esperanza de que se corrija el desajuste de tipos.


Estoy de acuerdo, no deberíamos usar int en lugar de datetime, o color. ni siquiera por errores de ejecución, sino por lo que pasará cuando los desarrolladores pongan las cosas en orden.
 
VladislavVG:


No para nada, IMHO, por supuesto: datetime es realmente int. Aunque, todo lo que se ha escrito es correcto en general, pero no en este caso. No puedo entender la lógica de los desarrolladores de ICL aquí (((((((((((((. Quizá lo corrijan en una nueva versión del idioma.

HH el sentido del post borrado era que los tipos deben ser utilizados como se pretende, de lo contrario se puede encontrar con errores de ejecución. En este caso, para la fecha es mejor datetime, pero no int, porque hay esperanza de que se corrija el desajuste de tipos.

Sí, prometieron 8 bytes como en MQL5. Supongo que será del tipo __time64_t (UNIXTIME64).
 
solnce600:

Señores profesionales.... Estoy confundido

TarasBY yartmedia70 dicen que mi error está relacionado con el valor de la variable que almacena el número mágico del pedido


Vinin dice queno se trata de un número mágico sino de una lógica equivocada......... artmedia70 discutecon él

.

Si los profesionales no tienen un consenso sobre mi problema, ¿qué debo hacer como principiante para resolver mi problema?


El error con el mago hace que su EA no vea que su posición se cierra en un stop cuando se cierra en un stop. ¿Por qué? La respuesta es que abres una posición con magic 123 y envías la variable Magic a la función que comprueba el cierre de la posición en el stop. ¿A qué crees que equivale durante la inicialización implícita? Cero. La función busca naturalmente posiciones con el número mágico 0 y es igual a 123 en sus posiciones. Y no estamos discutiendo, sólo... ...razonamiento... Compruebe la respuesta para cerrar en la parada:


double   Lot;
int      Magic=123;

int start() {

   double Price=iOpen(Symbol (),0,0);
          
   int last_order_bar=0; 
   int ot=OrdersTotal();
   if (ot>0) {
      if (OrderSelect(ot-1,SELECT_BY_POS))
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) last_order_bar=iBarShift(Symbol(),0,OrderOpenTime()); 
      }                                    

   int last_hist_order_bar=0;   
   int oht=OrdersHistoryTotal(); 

   if (oht>0) { 
      if (OrderSelect(oht-1,SELECT_BY_POS, MODE_HISTORY))    
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) last_hist_order_bar=iBarShift(Symbol(),0,OrderOpenTime());
      }

   if (ot==0)
      if (Bid==Price)
  //=============================================================== 
         if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
            if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
               if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))
  //============================================================
                  Lot=MarketInfo(Symbol(), MODE_MINLOT);   
                  if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot)) {
                     Lot=Lot*2;
                     OrderSend(Symbol(),OP_SELL,Lot,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
                     }
                  else {
                     Lot=0.1;        
                     OrderSend(Symbol(),OP_SELL,1,Bid,Lot,Ask+1500*Point,Ask-300*Point,"jfh",123 );
                     }
   return(0);
}
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy, int op, int mn, double &ll) {
   double   pt;
   int      dg, i, j=-1, k=OrdersHistoryTotal()-1;
   datetime t=0;                                   // во избежание возможных ошибок после возможных будущих улучшений
   for (i=k; i>=0; i--) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderMagicNumber()!=mn)   continue;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)        continue;   // если символ не тот, переходим к следующему
         if (OrderType()!=op)          continue;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);      // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
      if (MathAbs(OrderClosePrice()-OrderStopLoss())<0.5*pt) { // Если закрыт по стопу
         ll=OrderLots();                              // записываем количество лотов в ордере, закрытом по стопу
         return(true);                                // возвращаем истину
         }
      }
   return(False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}
//+----------------------------------------------------------------------------+

No he mirado el resto de la lógica de tu EA "muerto" - te estaba ayudando a descubrir la función para comprobar el cierre en la parada...

 
tara:

De nada. Buena suerte.

¡Alexei! ¡Buenas tardes!

Nuestra comunicación no sale de mi cabeza...... y aquí está el porqué.....

En relación con mi codificación, he escuchado repetidamente comentarios sobre la falta de lógica.

Ayer me explicaste el álgebra booleana, es un tema amplio y profundo.

El hecho es que no soy un matemático y ciertamente no soy una mente algebraica.

Algunas cosas matemáticas no muy difíciles las entiendo.... pero no a la vez, y cosas complejas mi cerebro no las percibe en absoluto.

Hace más de seis meses, antes de empezar a estudiar el libro de texto de programación de ACM, me preguntaba

si pudiera entenderlo sin capacidad matemática.

Pero el Sr. Kozlov, en el prefacio de su libro de texto, dice que en realidad es mucho más sencillo de lo que parece a primera vista.

a primera vista.

Y de hecho el 60-70% de su tutorial creo que ahora soy capaz de entenderlo (probablemente no sea la primera vez) y como resultado ya puedo codificar algo.

Hasta ayer me parecía que todos los complejos cálculos matemáticos (que no puedo entender) hacer el programa, y sólo necesito saber las reglas por las que

el programa funciona y hace los cálculos.

Pero nuestra conversación de ayer me llevó a la idea de que si no aprendo álgebra booleana, mis códigos estarán ausentes de lógica.

Si mis códigos carecen de lógica booleana, mis programas no funcionarán correctamente, o no funcionarán en absoluto.

Pero ayer eché un vistazo a la Wikipedia y me di cuenta de que el álgebra booleana, y probablemente la lógica, no es para mi mente.

Ayer has deducido rápidamente de un vistazo superficial a un fragmento de mi código que carece de lógica booleana.

Si no le importa, ¿podría explicar el curso de su razonamiento, que precedió a su conclusión sobre la ausencia de lógica en este fragmento?

Si te entiendo, seguiré adelante. Si no comprendo....., probablemente llegaré a la conclusión de que la programación es algo que supera ampliamente mis capacidades.

Gracias.

si (ot==0)
si (Oferta==Precio)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))