[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 50

 
Zhunko:
Se han tenido en cuenta el marco alemán, el ecu y el euro. Creía que todo el mundo lo sabía.

Resulta que no todo el mundo... :(

Es extraño... Una marca es una marca, no es un euro... Bueno, olvídalo... Tendremos en cuenta ese hecho...

 
Notter:

Buenas tardes a todas las personas de bien,

Pregunta sobre la negociación con movimientos fuertes. La función OrderSend tiene el parámetro slippage - deslizamiento máximo del precio de la orden. ¿Existen limitaciones en su valor? ¿O podemos fijarlo en 1000 puntos? ¿El valor "0" significa que el deslizamiento es nulo o que este parámetro no se tiene en cuenta al abrir la orden?

Además, en caso de un movimiento fuerte, ¿mi orden de mercado enviada desde mi terminal de cliente llegará al servidor y esperará a la ejecución de las órdenes pendientes que están colocadas en el servidor independientemente de sus precios o se ejecutará inmediatamente al precio de mercado en el momento de su recepción? En otras palabras, ¿puedo esperar que la orden se ejecute antes de la ruptura o se abrirá sólo al comienzo de la corrección?

El deslizamiento es la diferencia en puntos entre el precio de la orden en su terminal y el precio devuelto por el servidor. Mientras se lo piensan, el precio también puede alejarse. Cuando hay un fuerte movimiento, el servidor suele ralentizarse. Cuanto más se empolle, menos posibilidades tendrá de abrir al precio publicado y, por tanto, a un mejor precio para usted. Si establece un deslizamiento de 1000 pips, abrirá... al final de la mudanza. Esto es rentable para las empresas de corretaje. Y cuanto más "cocina :)", más tiempo "pensará" el servidor, sobrecargándote con requotes y demás.

Al establecer el parámetro de deslizamiento en 0, se abrirá sólo si el precio de la orden y el precio devuelto por el servidor son idénticos.

 

¡Feliz Año Nuevo!

He escrito un código que se supone que debe encontrar el máximo y el mínimo del marco de tiempo especificado dentro de un día. Pero en realidad algo no funciona. Por favor, échale un vistazo.

//+------------------------------------------------------------------+
//|                                                     +Session.mq4 |
//|                                       Copyright 2012, silhouette |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, silhouette"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#include <+ChartTrendLineCreate.mqh>

string OpenTime="00:00"; // время открытия сессии
string CloseTime="09:00"; // время закрытия сессии
int Days=100; // количество расчитываемых дней

//+------------------------------------------------------------------+
string Symb;
int i;
bool Ans;
//+------------------------------------------------------------------+
int init()
  {
   Symb=Symbol();
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   //+------------------------------------------------------------------+
   datetime Time_OD, H1_OS, H1_CS; 
   int H1_OpenDayShift, H1_OpenSessionShift, H1_CloseSessionShift, Hst, Lst;
   string H1_OD;
   double Maximum, Minimum;
   //+------------------------------------------------------------------+
   for(i=0; i<100; i++) // перебираем дни
    {
     Time_OD=iTime(Symb,PERIOD_D1,i); // находим дату открытия выбранного бара
     H1_OpenDayShift=iBarShift(Symb,PERIOD_H1,Time_OD,false); // ...его индекс
     
     H1_OD=TimeToStr(Time_OD,TIME_DATE); 
     
     H1_OS=StrToTime(H1_OD+" "+OpenTime);
     H1_OpenSessionShift=iBarShift(Symb,PERIOD_H1,H1_OS,false); // ...индекс бара открытия сессии
     H1_CS=StrToTime(H1_OD+" "+CloseTime);
     H1_CloseSessionShift=iBarShift(Symb,PERIOD_H1,H1_CS,false); // ...индекс бара закрытия сессии
     
     // ... максимум и минимум
     Hst=iHighest(Symb,PERIOD_H1,MODE_HIGH,(H1_OpenSessionShift-H1_CloseSessionShift),H1_CloseSessionShift);
     Lst=iLowest(Symb,PERIOD_H1,MODE_LOW,(H1_OpenSessionShift-H1_CloseSessionShift),H1_CloseSessionShift);
     Maximum=iHigh(Symb,PERIOD_H1,Hst);
     Minimum=iLow(Symb,PERIOD_H1,Lst);
     
     ChartTrendLineCreate(H1_OS, Maximum, H1_CS, Maximum, Red);
     ChartTrendLineCreate(H1_OS, Minimum, H1_CS, Minimum, Red);
     
     
    }

   return(0);
  }

 
silhouette:

¡Feliz Año Nuevo!

He escrito un código que debe encontrar el máximo y el mínimo del período de tiempo especificado dentro del día. Pero de hecho algo no funciona. Por favor, échale un vistazo.

Prueba H1_OpenSessionShift-H1_CloseSessionShift +1
 
Mislaid:
Prueba H1_OpenSessionShift-H1_CloseSessionShift +1
Gracias, ahora encuentra todo como debería.
 
¿Me pueden decir cómo hacer un EA para colocar órdenes cada 4 horas en TF D1? Ahora tengo que cambiar manualmente a TF pequeño y establecer una orden si las señales del indicador coinciden con D1. Es un fastidio y un inconveniente.
 
sultonov:
Si quisiera preguntar cómo puedo configurar un EA en TF D1 para que coloque órdenes cada 4 horas, por ejemplo? Si la señal de mi indicador es la misma que en D1, entonces tengo que ir manualmente a TF pequeño y colocar la orden. Es fastidioso e inconveniente.

¡¡Feliz Año Nuevo, Yusuf!!

Para ello es necesario prescribir explícitamente las condiciones en su EA, incluyendo el seguimiento del tiempo para establecer las órdenes, puede controlar una nueva barra en TF H4 para permitir que funcione.

En tu caso, ¿qué impide que el EA se adjunte al gráfico de símbolos en H4 y obtenga señales para abrir órdenes utilizando D1 y fijándolas explícitamente en el código del expa?

P.D. ¿Y tú? ¿No bebes alcohol o algo así?

Aquí es el 2 de enero: ¡bebe y bebe! :-)

 

He escrito una función que debería encontrar el TP por Fibo:

//+-------------------------------------------------------------------------------------+
//| Вычисление ТП по Фибе                                                               |
//+-------------------------------------------------------------------------------------+
double GetProfitByFibo()
{
  double minValue, maxValue;
  
 // if(GetStateMa() == MA_TALKING_LONG)
    if(OrderType() == OP_BUYSTOP)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftB);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftB);
     
      if((maxValue - minValue) >= 7*pt)
      {
      double fibo1618 = NormalizeDouble((minValue + (maxValue - minValue)*1.618),Digits);
      }
   
    }
  
 // if(GetStateMa() == MA_TALKING_SHORT)
    if(OrderType() == OP_SELLSTOP)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftS);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftS);
 
      if((maxValue - minValue) >= 7*pt)
      {
      fibo1618 = NormalizeDouble((maxValue - (maxValue - minValue)*1.618),Digits);
      }
          
  }
  return(fibo1618);
}

Las variables externas para esta función están aquí:

extern string ___H2 = "_____  Параметры для функции Fibo_TP _____";
extern int i_ExtremumLookingTF = 5,
           i_maxValueShiftB = 8,
           i_minValueShiftB = 3,
           i_maxValueShiftS = 3,
           i_minValueShiftS = 8;

Inserto esta función en lugar de un Take Profit fijo en un EA que funciona y el EA empieza a calarse. ¿Qué puede estar mal?

Periódicamente, al modificar una orden, el TP no se fija en absoluto.

Esta es una función para comprar, por ejemplo (he comentado la función de modificación anterior):

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
  int ticket = -1;
  string myNote = "Сов баянул";
  
  double price = High[1] + i_thresholdFromInput*pt;
  double SL = Low[1] - i_thresholdFromBasedSL*pt ;

  if(price > Ask)
  {
    ticket = OrderSend(Symbol(),OP_BUYSTOP,0.1,NormalizeDouble(price,Digits),i_slippage,0,0,myNote,i_myMagic,0,Navy);
  }
  
  if(ticket > 0 && OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  //  if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),NormalizeDouble(High[1] + i_tp*pt,Digits),0,Navy))
//  Print("GetProfitByFibo() = ", GetProfitByFibo());
      if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),GetProfitByFibo(),0,Navy))
    return(false);
  
  return(true);
}
 
double GetOrderOpenPrice(string sy="NULL", int op=-1, int mn=-1)
{
datetime t;
double r=0;
int i, k=Total de Pedidos();

if (sy=="0") sy=Símbolo();
for (i=0; i<k; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==sy || sy=="")
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (op<0 || OrderType()==op)
{
if (mn<0 || OrderMagicNumber()==mn)
{
if (t<OrderOpenTime())
{
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}
return(r);

}


Esta función comprueba el precio de apertura del último pedido.

Cómo escribir esta condición en la llamada a la función: Si el precio ha subido o bajado 75 pips desde el precio de apertura de la última orden, seguiremos trabajando.

 

¡Hola!

El archivo adjunto contiene un EA de Voldemar. Lamentablemente, no responde en privado y me gustaría corregirlo cuanto antes.

¿Cómo puedo modificar las condiciones de apertura del pedido? En este momento, el EA está ajustado al precio de retroceso. Queremos que se abra en base a la última barra. Si el precio de cierre es inferior al de apertura, abrirá una venta y viceversa.

Gracias

Archivos adjuntos:
Razón de la queja: