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

 
¡Buenos días! Dígame. Digamos que voy a usar
double iMA(     string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

En la ayuda dice plazo - Punto. Puede ser uno de los períodos de un gráfico. 0 significa el período del gráfico actual.

¿Puede, o es definitivamente el período del gráfico? Pero, ¿y si pongo 20 en lugar de 15? ¿Es mejor usar un número o es mejor PERIOD_M15?

Ok, pongo 0 ahí y no me molesto.

 

Buenos días a todos. Estaría muy agradecido si alguien pudiera insertar un sonido en este indicador.

Es decir, cuando hay un cruce de .... y, por supuesto, el sonido sólo debe hacerse una vez al cierre de la vela en la que se ha producido este cruce.

Gracias de antemano por su ayuda.

Archivos adjuntos:
 
Dimka-novitsek:
¡Buenos días! Dígame. Digamos que voy a usar

En la ayuda dice plazo - Punto. Puede ser uno de los períodos de un gráfico. 0 significa el período del gráfico actual.

¿Puede, o es definitivamente el período del gráfico? Pero, ¿y si pongo 20 en lugar de 15? ¿Es mejor usar un número o es mejor PERIOD_M15?

Ok, pongo 0 ahí y no me molesto.

El periodo se fija en minutos. Por ejemplo, 60 es una hora, 240 son 4 horas... etc, 5 es M5.
 

No he encontrado la función deKimIV para devolver el importe de la reducción/ganancia de la última orden cerrada.

La idea es sencilla: hay que hacer un seguimiento de cuánto en moneda de depósito fue el Beneficio o la Reducción en la última orden cerrada.

 
fmillion:

No he encontrado la función deKimIV para devolver la cantidad de reducción/ganancia de la última orden cerrada.

La idea es sencilla: hay que hacer un seguimiento de cuánto en la moneda del depósito fue el Beneficio o la Reducción en la última orden cerrada.

Este diseño funciona para mí:

//---Поиск крайнего отработавшего ордера для открытия очередной позиции ---   
   for (orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY)) {Print("Ошибка при доступе к исторической базе (",GetLastError(),")");continue;}   
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))  continue;              
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
      if (time<OrderCloseTime())     //(сравниваем его с хранящимся в пероеменной time) 
        {
         time=OrderCloseTime();     //если время закрытия ордера больше - ложим его в переменную     
         int lastType = OrderType();
         double lastLots = OrderLots();
         double lastProfit = OrderProfit() + OrderSwap();
         
         // Анализ только что закрывшегося ордера      
         if (lastProfit >= 0.0)
         {
...
 
Roman.:

Tengo un diseño que funciona:

¿y a qué es igual la variable de tiempo al principio del bucle?
 
fmillion:

No he encontrado la función deKimIV para devolver el importe de la reducción/ganancia de la última orden cerrada.

La idea es sencilla: hay que hacer un seguimiento de cuánto en la moneda del depósito fue el Beneficio o la Reducción en la última orden cerrada.

El algoritmo es el siguiente: buscar CUALQUIER función que devuelva CUALQUIER cosa sobre el último orden cerrado. Consigue el Ticket de la última orden cerrada. Una vez finalizado el bucle, se selecciona una orden por el Ticket obtenido y se calcula su beneficio (si es importante, no debemos olvidar considerar el swap y la comisión a la hora de calcularlo):

    Profit = OrderProfit() + OrderSwap() + OrderCommission();
 
Zhunko:
Pásalo y echa un vistazo. Un "kit" bastante útil.

Veo que el "perro" y los espacios entre él se utilizan para mostrar un número. Pero, ¿por qué ocurre esto? ¿Es algo que no proviene de la programación de mql? ¿Existe algo así en C?

Realmente no entiendo por qué sucede. Y tampoco estoy muy seguro de lo que produce. Veo números de Fibo en algunos niveles a través del "perro", y en algunos niveles algo más?

¿Puede explicar el motivo de su aparición? Me he vuelto muy curioso. Pero lo abrí por segundo día y no lo entendí.

Voy a duplicar el código del script para evitar buscarlo en el historial:

//+------------------------------------------------------------------+
//|                              Brooky_FibIt_Retracement_Script.mq4 |
//|                        Copyright 2012, www.Brooky_Indicators.com |
//|                                        www.Brooky_Indicators.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, www.Brooky_Indicators.com"
#property link      "www.Brooky_Indicators.com"
#property show_confirm  
#property show_inputs
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

extern int       FibOnChartNum =1;

extern color     Fib_Cbar_Color = Red;
extern int       Fib_Cbar_Size=1;
extern int       Fib_Cbar_Style=2;

extern color     Fib_Level_Color = Gray;
extern int       Fib_Level_Size=1;
extern int       Fib_Level_Style=2;

extern double     Fib_Level_1 = 0;
extern double     Fib_Level_2 = 0.236;
extern double     Fib_Level_3 = 0.382;
extern double     Fib_Level_4 = 0.5;
extern double     Fib_Level_5 = 0.618;
extern double     Fib_Level_6 = 0.764;
extern double     Fib_Level_7 = 1;

string Xtra_txtFib_Level_1  = "Extreme ";
string Xtra_txtFib_Level_2  = "Break OUT ";
string Xtra_txtFib_Level_3  = "Break IN ";
string Xtra_txtFib_Level_4  = "Centre ";
string Xtra_txtFib_Level_5  = "Break IN ";
string Xtra_txtFib_Level_6  = "Break OUT ";
string Xtra_txtFib_Level_7  = "Extreme ";


string txtFib_Level_1  = "";
string txtFib_Level_2  = "";
string txtFib_Level_3  = "";
string txtFib_Level_4  = "";
string txtFib_Level_5  = "";
string txtFib_Level_6  = "";
string txtFib_Level_7  = "";


string FibPrice = " @ %$";
string FibPrice1 = " ";
string FibName = "";

int start()
  {

//----
      txtFib_Level_1 = StringConcatenate(Xtra_txtFib_Level_1,DoubleToStr(Fib_Level_1,3),FibPrice1);
      txtFib_Level_2 = StringConcatenate(Xtra_txtFib_Level_2,DoubleToStr(Fib_Level_2,3),FibPrice);
      txtFib_Level_3 = StringConcatenate(Xtra_txtFib_Level_3,DoubleToStr(Fib_Level_3,3),FibPrice1);
      txtFib_Level_4 = StringConcatenate(Xtra_txtFib_Level_4,DoubleToStr(Fib_Level_4,3),FibPrice);
      txtFib_Level_5 = StringConcatenate(Xtra_txtFib_Level_5,DoubleToStr(Fib_Level_5,3),FibPrice1);
      txtFib_Level_6 = StringConcatenate(Xtra_txtFib_Level_6,DoubleToStr(Fib_Level_6,3),FibPrice);
      txtFib_Level_7 = StringConcatenate(Xtra_txtFib_Level_7,DoubleToStr(Fib_Level_7,3),FibPrice);
      
      
      
      FibName = "Brooky_FibR_"+FibOnChartNum;
      ObjectDelete(FibName);
      
      ObjectCreate(FibName,OBJ_FIBO,0,Time[21],High[24],Time[1],Low[1]);
      
      ObjectSet(FibName, OBJPROP_COLOR,Fib_Cbar_Color);
      ObjectSet(FibName, OBJPROP_WIDTH ,Fib_Cbar_Size);
      ObjectSet(FibName, OBJPROP_STYLE ,Fib_Cbar_Style);
      
      ObjectSet(FibName, OBJPROP_RAY,True);
       
      ObjectSet(FibName, OBJPROP_LEVELSTYLE,Fib_Level_Style);
      ObjectSet(FibName, OBJPROP_LEVELCOLOR,Fib_Level_Color);      
      ObjectSet(FibName, OBJPROP_LEVELWIDTH,Fib_Level_Size);  
       
          
      ObjectSet(FibName, OBJPROP_FIBOLEVELS,7);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+0,Fib_Level_1);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+1,Fib_Level_2);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+2,Fib_Level_3);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+3,Fib_Level_4);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+4,Fib_Level_5);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+5,Fib_Level_6);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+6,Fib_Level_7);
      

     
      ObjectSetFiboDescription(FibName,0,txtFib_Level_1);
      ObjectSetFiboDescription(FibName,1,txtFib_Level_2);
      ObjectSetFiboDescription(FibName,2,txtFib_Level_3);
      ObjectSetFiboDescription(FibName,3,txtFib_Level_4);
      ObjectSetFiboDescription(FibName,4,txtFib_Level_5);
      ObjectSetFiboDescription(FibName,5,txtFib_Level_6);
      ObjectSetFiboDescription(FibName,6,txtFib_Level_7);      
      
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Amigos, me he encontrado con un problema sencillo, pero no consigo resolverlo. La esencia es la siguiente. Cuando se cumplen ciertas condiciones, se abre una operación (llamémosla operación principal). Y necesito abrir otra operación (repetir) dentro de las próximas 3 barras, si esta condición se repite. Si dentro de las tres barras siguientes no se cumple la condición que necesito, entonces la operación no debería abrirse de nuevo hasta la próxima vez que se abra de nuevo la operación. Y así sucesivamente. Tengo, por alguna razón, reabrir sólo una vez (es decir, cuando todas las condiciones se cumplen en general la primera vez - se abre, pero en lo sucesivo, cuando después de la nueva posición principal aparece condición de abrir un comercio de repetición - no se abre). Ayuda, por favor.

//условие открытия повторной сделки
for (povtor_up=1;povtor_up<4;povtor_up++)
if ((povtor_buy==1) && (adx_cont==1)&&(sb==1))
{
  CL = iClose(NULL,0,1);
  stop = CL - SLP*Point;
  raz_up = (CL - frac_down);
  take_1 = 0;
  take_2 = 0;
  if (CL<(frac_up-FR_OVER*Point))
  take_1 = (CL + raz_up*MNP_1);
  if (CL>=(frac_up-FR_OVER*Point))
  take_2 = (CL + raz_up*MNP_2);
  if (take_1>0)
  {
  take_1n = NormalizeDouble(take_1,5);
  take = take_1n;
  }
  if (take_2>0)
  {
  take_2n = NormalizeDouble(take_2,5);
  take = take_2n;
  }

    if(!IsTradeAllowed())
      {
      Alert("занят торговый поток, повторим попытку buy");
      return(-1);
      }
  ticket_buy_cont=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,stop,take,com,Magic,0,Yellow);
    if(ticket_buy_cont == -1)
    {
    Alert(Symbol(),"ошибка:buy", GetLastError());
    return(-1);
    }
    if(ticket_buy_cont > 1)
    {Alert (Symbol(),"buy повтор - ок !");
    povtor_buy=0;
    povtor_up=0;
    }

}
else 
    povtor_buy=0;
    povtor_up=0;


//условие открытия ведущей сделки
if ((adx_ts==1) && (sb==1) && (FLAG==0))
{
  CL = iClose(NULL,0,1);
  stop = CL - SL*Point;
  raz_up = (CL - frac_down);
  take_1 = 0;
  take_2 = 0;
  if (CL<(frac_up-FR_OVER*Point))
  take_1 = (CL + raz_up*MN_1);
  if (CL>=(frac_up-FR_OVER*Point))
  take_2 = (CL + raz_up*MN_2);
  if (take_1>0)
  {
  take_1n = NormalizeDouble(take_1,5);
  take = take_1n;
  }
  if (take_2>0)
  {
  take_2n = NormalizeDouble(take_2,5);
  take = take_2n;
  }

    if(!IsTradeAllowed())
      {
      Alert("занят торговый поток, повторим попытку buy");
      return(-1);
      }
  ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,stop,take,com,Magic,0,Yellow);
    if(ticket_buy == -1)
    {
    Alert(Symbol(),"ошибка:buy", GetLastError());
    return(-1);
    }
    if(ticket_buy > 1)
    {Alert (Symbol(),"buy при начале - ок !");
    FLAG=1;
    povtor_up=1;
    povtor_buy=1;
    }

}
 
Big_Bo:

Amigos, me he encontrado con un problema sencillo, pero no consigo resolverlo. La esencia es la siguiente. Cuando se cumplen ciertas condiciones, se abre una operación (llamémosla operación principal). Y necesito abrir otra operación (repetir) dentro de las próximas 3 barras, si esta condición se repite. Si dentro de las tres barras siguientes no se cumple la condición que necesito, entonces la operación no debería abrirse de nuevo hasta la próxima vez que se abra de nuevo la operación. Y así sucesivamente. Tengo, por alguna razón, reabrir sólo una vez (es decir, cuando todas las condiciones se cumplen en general la primera vez - se abre, pero en lo sucesivo, cuando después de la nueva posición principal aparece condición de abrir un comercio de repetición - no se abre). Ayuda, por favor.

No olvide (o acostúmbrese - como quiera) que el EA puede ser recargado mientras trabaja (si no es un probador, por supuesto), y eso significa que los valores de las banderas se pierden si no se escriben en algún lugar durante la desinicialización y no se restauran durante la inicialización. Es más fácil "llevar la cuenta" de sus pedidos. Si hay una diferencia entre los pedidos (en este caso, un maestro y un esclavo), entonces se pueden distinguir por diferentes revistas, o por un registro en los comentarios, o el segundo esclavo se abre después de la primera orden (lo que su corazón desea).

Separar el código en funciones definidas por el usuario - para que sea más fácil de leer y entender: por separado para las condiciones de apertura (obtener una señal), por separado para obtener el STOP y por separado para las órdenes de apertura. El sentido de este bucle no está en absoluto claro:

    for (povtor_up = 1; povtor_up < 4; povtor_up++)

Si es la comprobación mencionada: "dentro de los próximos 3 compases" - entonces me he perdido algo en esta vida...

Tienes una hora de apertura de la primera orden "maestra" - utilízala como guía.