[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 262

 
Valdemar:

Señores, ¿pueden decirme dónde me he equivocado al insertar esta función de sincronización en mi código de EA?

El compilador me inundó de errores.



En el lugar donde se declaró una función dentro de otra función:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {
 
Roll:

Ver el décimo parámetro de la función especificada. Poner a 0.

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

¿encontró esta línea y qué cambiar allí?

 
Starting:

El uso es sencillo: ejecuto el script...

Que es lo que necesitabas probar. Es decir, necesitas un código que determine el orden correcto. Hay docenas de situaciones de este tipo, y no se puede guardar una función especial para cada una de ellas para simplificar el código. Debe redactarse para cada caso.
Puede encontrar ejemplos de funciones similares aquí: Funciones útiles de KimIV.

Si no te sirven los que están en el mercado, puedes construir uno propio por analogía con los existentes.
 
Bicus:

Aquí el cálculo se basa en la inercia de los precios. Es decir, el stop loss de la primera orden se activa, la segunda orden está en beneficio con un valor un poco menor que la pérdida. Si el precio se mueve en la misma dirección un poco más, entonces sí, podemos estar en el beneficio total.

Pero, en mi opinión, esta estrategia no vale la pena.

Sí, claro. Adivinando si va a ir unos pocos pips más en la dirección rentable :)
 
granit77:
Esto es exactamente lo que tenemos que demostrar. En otras palabras, necesita un código que encuentre el orden necesario. Hay docenas de situaciones de este tipo, y no podemos proporcionar una función especial para cada una de ellas para simplificar el código. Debe redactarse para cada caso.
Puede encontrar ejemplos de funciones similares aquí: Funciones útiles de KimIV.

Si no te sirven los que están en el mercado, puedes construir uno propio por analogía con los existentes.


Creo que no he entendido bien lo que quería decir.

Afirmación 1. Todo código, después de la activación de la orden pendiente, al acceder a la fecha de apertura de esta orden (que ha pasado a ser negociable en el momento de dicha activación), obtendrá la fecha de apertura igual a la fecha de colocación de la orden pendiente - así funciona la función OrderOpenTime().

Afirmación 2: No se puede recordar la hora exacta de la activación de la orden pendiente, sin un Asesor Experto que supervise constantemente el estado de las órdenes en la cuenta.


Posible solución 1. Podemos intentar correr desde la fecha de establecimiento de la orden pendiente hasta la fecha actual y anotar el momento del primer cruce del precio de apertura y el nivel de activación.

Será un tiempo más o menos exacto, pero hay un gran inconveniente: el margen. Dado que no registramos el spread en el historial (no estoy tomando el historial de ticks con el spread tomado de Dukas, por ejemplo, ya que no estoy operando en Dukas y necesitamos recogerlo y registrarlo), la orden puede haberse disparado mucho antes, cuando el precio casi tocó el nivel de apertura pero no lo cruzó, y la orden se abrió debido a la expansión del spread, y no después, cuando realmente vimos que el precio cruzaba la línea de ajuste de la orden pendiente.


La solución más probable es crear un Asesor Experto, ponerlo en el gráfico y controlar las órdenes en la cuenta. No quiero hacerlo, por algunas razones, también hay desventajas asociadas con posibles problemas durante las pausas en la operación de EA.


Las funciones, a las que se ha referido. Ha proporcionado un enlace a la función OrderOpenTime(). Para las órdenes retrasadas será la fecha de su creación, y no la de su activación. Por lo tanto, las funciones existentes no son adecuadas. Y no hay manera de combinarlos, ya que siguen haciendo referencia a OrderOpenTime() para la fecha de apertura del pedido.

 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

¿encontró esta línea y qué cambiar allí?

Imprima los parámetros y vea
 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

¿encontró esta línea y qué cambiar allí?

Tiene el décimo parámetro "Newest", mientras que el número que necesita es el tiempo de expiración de la orden
 

aquí está toda la línea

if (!(AccountFreeMarginCheck(g_symbol_284, OP_BUY, Lots) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */)) g_ticket_352 = OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest RX-1", MediumBlue);
 
 
Pyxlik2009:

aquí está toda la línea

Otra vez:

Documentación:

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Su décimo parámetro en la cadena "Newest " no es un número. Por eso hay un error

 

PapaYozh
:


Donde se declara una función dentro de otra función:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {


Gracias por tu comentario, querido PapaYozh,pero he insertado esta función en int start(), pero esto no cambia el resultado del compilador.

int start()
{
int H,M,Ticket;
double Max,Min,
Max1,Min1,
TP,
Total;

bool isTradeTimeInt(int hb=07,int mb=55,int he=23,int me=00) 
    {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 

H=Hour();
M=Minute();
Total=OrdersTotal();
if(Total==0)
{
if(isTradeTimeInt==true)
{
   Max=High[iHighest(Symbol(),PERIOD_M5,MODE_HIGH,12,0)];
   Min=Low[iLowest(Symbol(),PERIOD_M5,MODE_LOW,12,0)];
Al final el compilador me mostró estos errores, y creo que se refiere a la definición de la variable equivocada?

Pido disculpas por las molestias, la incomprensión, después de todo, acaba de empezar a ganar experiencia en un asunto tan no fácil, y creo que gracias a este foro y las personas que respondieron aquí, seguir desarrollando y mejorando sus habilidades, gracias.