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

 
¿Dónde está el error de "recuento de parámetros erróneos" aquí?
MA1 = iMA(NULL, 0, MA_Period1, MODE_SMA, PRICE_CLOSE,0);
 
Сvovan-gogan:
¿Dónde está el error de "recuento de parámetros erróneos" aquí?


¡Buenas tardes! Gracias, señor, por hacer la pregunta. Me alegro de ser útil.

Inclinamos la cintura y respondemos con inteligencia:

Es evidente que te falta un parámetro en iMA:

doble iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
Cálculo de la media móvil.
Parámetros:
símbolo - Nombre del símbolo, sobre cuyos datos se calculará el indicador. NULL significa símbolo actual.
marco temporal - Período. Puede ser uno de los períodos del gráfico. 0 significa el período del gráfico actual.
período - Periodo de promediación para el cálculo de la media móvil.
ma_shift - Desplazamiento del indicador en relación con el gráfico de precios.
ma_method - Método de promediación. Puede ser cualquiera de los valores de los métodos de Media Móvil.
precio_aplicado - Precio utilizado. Puede ser cualquiera de las constantes de precio.
turno - Índice del valor obtenido del búfer del indicador (desplazamiento relativo a la barra actual en el número de períodos especificado hacia atrás).
--------------------------

Lo más probable es que falte el parámetro:

ma_shift - Desplazamiento del indicador respecto al gráfico de precios.

Esperamos sus preguntas.

 
Muchas gracias)
 

Necesito tu ayuda.

Esta expresión debe ser traducida

OrderOpenPrice()-OrderClosePrice()
en número de puntos y calcular el beneficio o el stop de cada posición en función del lote. Y finalmente imprimir el importe total en % de beneficio o parada
 
Vodya:

Necesito tu ayuda.

Necesito traducir esta expresión

al número de artículos ......


Seleccione primero el elemento deseado.

( OrderOpenPrice() - OrderClosePrice() ) /Punto - este será el beneficio/pérdida de la posición seleccionada en pips

---------------

En realidad, para tus cálculos, es mejor usar funciones apropiadas de I. Kim. Y la tarea será varias veces más fácil.

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page3#434225

 
leonid553:


Primero selecciona la posición correcta.

( OrderOpenPrice() - OrderClosePrice() ) * Punto - será el beneficio/pérdida de la posición seleccionada en puntos

---------------

En realidad, para tus cálculos, es mejor usar funciones apropiadas de I. Kim. Y la tarea será varias veces más fácil.

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page3#434225


Gracias. Pero no he encontrado lo que necesito en su función. Y en este caso ( OrderOpenPrice() - OrderClosePrice() ) * Punto hago ( OrderOpenPrice() - OrderClosePrice() ) / Punto

Al multiplicar 000000000000000000, se obtiene

 

Sí, claro, me he equivocado, hay que dividir por el punto, no multiplicar.

Por función.

Es muy sencillo. Por ejemplo. Usted necesita saber la ganancia (o pérdida) actual en la divisa de depósito de las operaciones abiertas (supongamos) - posiciones Bai en EURUSD y posiciones Sell en GBPUSD.

Tomemos la función https://www.mql5.com/ru/forum/131859/page3#434223

y cópialo al final de tu código (fuera de la función START)

Entonces el beneficio actual en moneda de sus posiciones será (fijado dentro de START):

double PROFIT_ EURUSD = GetProfitOpenPosInCurrency(EURUSD, OP_BUY, -1) ;

double PROFIT_FUNTDOLLAR = GetProfitOpenPosInCurrency(GBPUSD, OP_SELL, -1) ;

Si has especificado un magik al abrir estas posiciones, especifica el magik en lugar de "-1".

Si necesita conocer el beneficio de una posición según el símbolo actual, es decir, en el gráfico, en el que se ha colocado el EA y se está ejecutando, entonces :

double PROFIT_NULL = GetProfitOpenPosInCurrency(NULL, OP_SELL, -1) ;

 
leonid553:

Sí, claro, me he equivocado, hay que dividir por el punto, no multiplicar.

Por función.

Es muy sencillo. Por ejemplo. Usted necesita saber la ganancia (o pérdida) actual en la divisa de depósito de las operaciones abiertas (supongamos) - posiciones Bai en EURUSD y posiciones Sell en GBPUSD.

Tomemos la función https://www.mql5.com/ru/forum/131859/page3#434223

y cópialo al final de tu código (fuera de la función START)

Entonces el beneficio actual en moneda de sus posiciones será (fijado dentro de START):

double PROFIT_ EURUSD = GetProfitOpenPosInCurrency(EURUSD, OP_BUY, -1) ;

double PROFIT_FUNTDOLLAR = GetProfitOpenPosInCurrency(GBPUSD, OP_SELL, -1) ;

Si has especificado un magik al abrir estas posiciones, especifica el magik en lugar de "-1".

Si necesita conocer el beneficio de una posición según el símbolo actual, es decir, en el gráfico, en el que se ha colocado el EA y se está ejecutando, entonces :

double PROFIT_NULL = GetProfitOpenPosInCurrency(NULL, OP_SELL, -1) ;


Gracias por los consejos.

Pero quiero establecer el beneficio como un porcentaje del depósito inicial y la pérdida del depósito que se calculará. Funciona, pero sólo para cada operación, no es posible calcular la pérdida total.

 
Vodya:


Gracias por el consejo.

Pero quiero calcular la ganancia como un porcentaje del depósito inicial y la pérdida del depósito. Puedo calcularlo, pero sólo para cada operación, no funciona en total.

A continuación se muestran las funciones para calcular las Pérdidas y Ganancias.

Si tienes el valor del tamaño/pérdida puedes calcular lo que es como porcentaje del depósito.

 double Profit(){
   double profit=0; 
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; 
     if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(OrderProfit()>0)profit+=OrderProfit();
    }        
 return(profit);} 

 double Loss(){
   double loss=0; 
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; 
     if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(OrderProfit()<0)loss+=OrderProfit();
    }        
 return(loss);} 
 
charter:

A continuación se muestran las funciones para calcular las Pérdidas y Ganancias.

Con el tamaño/valor de las Pérdidas y Ganancias, se puede calcular a qué asciende esto como porcentaje del depósito.


Gracias.

Pero cuando se compila en esta fila.

double Profit(){

aparece '(' - definición de función inesperada

y este "}". - paréntesis desequilibrados donde está el último return(0).

¿Dónde se debe pegar en absoluto? Tal vez lo puse en el lugar equivocado