[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 466

 
Cmu4:

No... Hice lo que me sugeriste - lo mismo queda.

Además, he cambiado el código, dividiendo por separado en bloques de apertura y cierre por condiciones. Es todo lo mismo. No sé qué hacer ahora.

Aquí hay una captura de pantalla del probador, EA para el probador está en el trailer:


Se podría hacer así, con un control de posición abierto
Archivos adjuntos:
 
Vinin:

Podría ser algo así, con el control de las posiciones abiertas.


También pensaba en esta dirección. Pero me interesa el error en sí. ¿Dónde está?

p.d. ¡Gracias por añadir el código! Cuando se pompila, se queja de undefined order_type, en la función Closeall.

 
Cmu4:


También pensaba en esta dirección. Pero me interesa el error en sí. ¿Dónde está?

p.d. ¡Gracias por añadir el código! Al pompilarlo, jura sobre order_type undefined, en la función Closeall.


void Closeall(int OP=-1)
{
   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      { 
         if(OrderSymbol()==Symbol())
         { 
            if (OrderType()==OP || OP=-1) 
            {
               if(OrderType()==OP_BUY)
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               else if(OrderType()==OP_SELL)
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
            }
         } 
      }
   }
}
 
Cmu4:

No... Hice lo que me sugeriste - lo mismo queda.

Además, he cambiado el código, dividiendo por separado en bloques de apertura y cierre por condiciones. Es todo lo mismo. No sé qué hacer ahora.

Aquí hay una captura de pantalla de un probador, el Asesor Experto está en el trailer:

Necesito saber: ¿Se abren las posiciones en fila así? Comprar, Vender, Comprar, Vender, etc. o consecutivos, por ejemplo, Comprar.

Creo que tiene posiciones de compra y venta que se abren sucesivamente.

La razón: los MACD que se comparan están muy cerca y cambian de lugar (más grande es más pequeño) rápidamente. Por lo tanto, primero se cumple una condición y luego la otra.

Solución:

if (MA1-MA2 > 0.0001 &&  MA2-MA3 > 0.0001 && Napr==1) //или другая константа
 
extralifes:

no a través de si no funciona.

Debería ser siempre que la condición (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 sea correcta, para abrir sólo una orden de venta si iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

Lo mismo ocurre a la inversa.

¿Se puede escribir a través de while o bool? Estoy en un completo aprieto en la programación. Entiendo la cadena lógica, pero mis manos son lentas para ejecutarla en código.


Así que ese no es el problema... todo debería funcionar si... Funciona así - siempre y cuando (su mismo while ) se cumpla la condición (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 - y RSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7), entonces abrimos sólo beneficio...

Aquí no hace falta ningún bool - ¿por qué tratar con banderas, cuando todo está claro que mientras se cumplan todas estas condiciones, abrimos órdenes de compra o de venta?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }

Vuelve a mirar con atención.

Busque el error en otra parte del código. Escribes "no funciona con si" - explícalo con más detalle - ¿qué dice en el "log"?

 
ikatsko:

¡Hola! No quiero (y a veces lo hago) golpear un StopOut. He decidido limitar el lote a un valor que no "atrape" el StopOut en las peores condiciones. Pasando por ensayo y error durante mucho tiempo. ¿Tal vez alguien tenga una solución?

Datos iniciales:

- Par de divisas - no necesariamente EURUSD

- precio (precio de compra/venta)

- un StopLoss especificado en puntos (se supone que en el peor de los casos no se produce un StopOut aunque se alcance el nivel de StopLoss)

- valor del lote especificado

- Otros valores deben ser llenados usando las funciones de MT4: Tamaño 1 lote, apalancamiento, tasa de cruce.

Preferiblemente un código.

En teoría, entiendo lo que se necesita: el saldo menos la posible pérdida en el nivel de StopLoss dividido por el margen. Y este valor debe ser mayor que el StopOut (en términos porcentuales).

Algo así

int level=AccountStopoutLevel(); ///// ТОЛЬКО ЕСЛИ ВЫРАЖЕН В ПРОЦЕНТАХ!!!
if (AccountStopoutMode==0)
  {
   double Marga = NormalizeDouble(MarketInfo("EURUSD", MODE_MARGINREQUIRED), 2);
   double TickValue = NormalizeDouble(MarketInfo("EURUSD", MODE_TICKVALUE), 2);
   int SL = 26;////Пунктов
   double lotsShortNaVSE = NormalizeDouble(AccountBalance() / (level * Marga / 100.0 + SL * TickValue ), 2);
  }

El número de lotes no debe ser superior al número de lotesShortNaVSE

SL ---- es una posible pérdida en su posición abierta.

Y las empresas de corretaje tienen su propia percepción de las posibles pérdidas.

Por eso tenemos que tomar el número máximo de su o de la empresa de corretaje. Por ejemplo, en este momento el Centro de Operaciones para el par EURUSD tiene una pérdida posible SL = 26.

SL = MathMax(VashSLvPunktah, SLvPunktahUVashegoDillinga);
¿Hay otras opciones?
 
rlx:


Y las empresas de corretaje también tienen su propia visión de la posible pérdida.

Por eso debe tomar el número máximo de su pérdida o la de su empresa de corretaje. Por ejemplo, en este momento la empresa de corretaje tiene una posible pérdida SL = 26 para el EURUSD.

¿Tal vez haya otras variantes?


Así es como se calcula esta vista de la DC.

Pero esto es más crítico para los operadores a corto plazo.

 

Es decir, por ejemplo, si usted tiene un stopLoss de 5 puntos. entonces, por supuesto, el número de lotes abiertos se calculará mucho.

Pero abrir una posición así no funcionará, porque las empresas de corretaje tienen su propio sistema de gestión de riesgos.

 
rlx:


La única cuestión es cómo calcular esta vista de la CC.

Pero esto es más crítico para las personas de corta duración.


¡Buenos días! Por favor, ayuda. Necesito un script que establezca automáticamente el stop y el beneficio durante el trading manual. ¿Crees que es posible y si existe, por favor, dame un enlace.
 
Cmu4:

No... Hice lo que me sugeriste - lo mismo queda.

Además, he cambiado el código, dividiendo por separado en bloques de apertura y cierre por condiciones. Es todo lo mismo. No sé qué hacer ahora.

Aquí hay una captura de pantalla del probador, EA para el probador está en el trailer:

Mientras se cumpla la condición MAKDak, las órdenes también se abrirán por lotes en cada tick.

Añadir a las condiciones
Para las posiciones de compra: Si NO hay una orden de compra de mercado, entonces ábrala...
Para las posiciones de venta: Si NO hay una orden de venta de mercado, ábrala...

Y el problema se resolverá.