Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 89

 
Omm:

¿Cómo puedo determinar la hora de la negociación de futuros?

MarketInfo(Symbol(),MODE_STARTING)

MarketInfo(Symbol(),MODE_EXPIRATION)

devuelve ceros


¿Qué corredor?

Así que, en primer lugar, debería consultar a su agente de bolsa.

 
alexey1979621:
Estimados miembros del foro, ¿cómo escribir la condición de cruce de la línea del canal por el precio en su Asesor Experto, por ejemplo, el precio cruza la línea del canal desde arriba y la operación se abre o se cierra? Tenga en cuenta que me interesa el momento de este cruce. Estaré encantado de ayudar.

double price0=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 0),Digits)); - valor de su línea en la barra 0.

double price1=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 1),Digits)); - valor de su línea en la barra 1.

Y la forma más sencilla de determinar el momento de ruptura en la barra cero: si(High[0]>precio0 && High[1]<=precio1) {la línea ha roto al alza}, si(Low[0]<precio0 && Low[1]>=precio1) {la línea ha roto a la baja}. Los ifs serán TRUE desde el momento de la ruptura hasta el final de la barra actual. Es deseable que su línea de canal tenga la propiedad OBJPROP_RAY==True

 
alexey1979621:
Estimados miembros del foro, ¿cómo hacer una condición en un EA para el cruce de la línea del canal, por ejemplo, si el precio cruza la línea del canal desde arriba y se abre o cierra una operación? Tenga en cuenta que me interesa el momento de este cruce. Estaré encantado de ayudar.

De un par de maneras:

Si Ask > línea del canal y Low[1] <=línea del canal, cruzar hacia arriba

Si Bid < línea de canal y High[1] >=línea de canal, cruza hacia abajo

Puede consultar con MA con el periodo 1

 
¿cómo puedo seleccionar la última orden CERRADA en el software y obtener información de ella?
 
Gracias por su ayuda

. Debo haber planteado mal la pregunta, debería haber adjuntado parte del código. Me corrijo.

Como sugiere

artmedia70 indicó que la intersección se cerrará de la siguiente manera. Cierra el trato según la captura de pantalla. Pero tenemos que cerrar el trato donde está la cruz

void CheckForClose()
{
doble PrecioAlto, PrecioBajo;
//---- ir a negociar sólo para los primeros tiks del nuevo bar
if(Volumen[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<TotalPedidos();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 | OrderSymbol()!=Symbol()) continuar;
//---- comprobar el tipo de orden
if(OrderType()==OP_BUY)
{
if(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
romper;
}
if(OrderType()==OP_SELL)
{
if(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
romper;
}
}
//----
}

 
 
webip:
¿cómo se puede seleccionar la última orden CERRADA en el software y obtener información de ella?

Puedes encontrar lo que quieras.
 
alexey1979621:
Gracias por su ayuda

. Debo haber planteado mal la pregunta, debería haber adjuntado parte del código. Me corrijo.

Como sugiere

artmedia70 indicó que la intersección se cerrará de la siguiente manera. El acuerdo se está cerrando según la captura de pantalla. Pero tenemos que cerrar el trato donde está la cruz

void CheckForClose()
{
doble PrecioAlto, PrecioBajo;
//---- ir a negociar sólo para los primeros tiks del nuevo bar
if(Volumen[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<TotalPedidos();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 | OrderSymbol()!=Symbol()) continuar;
//---- comprobar el tipo de orden
if(OrderType()==OP_BUY)
{
if(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
romper;
}
if(OrderType()==OP_SELL)
{
if(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
romper;
}
}
//----
}

ExtremeTMA - son impiadosamente sobregirados. Es un gran trozo de historia: los últimos 30 compases, si no más. Lo usé para escribir un Asesor Experto - es una basura. Imagínese: aparece una señal, la alcanzo, pero un tiempo después la señal no existe en el historial - el indicador vuelve a dibujarse y resulta que he entrado para nada

Ha cometido un error al determinar el cruce: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... debe escribir if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... Y para lo contrario por analogía.

Inserte el código con el botón SRC en el panel de la parte superior de la ventana de entrada

ZZZY ¿Dónde está la captura de pantalla con la cruz?

 
artmedia70:

ExtremeTMA - son impiadosamente sobregirados. Y una gran parte de la historia: los últimos 30 compases, si no más. Lo usé para escribir un Asesor Experto - es una mierda. Imagínese: tengo una señal, la introduzco, y algún tiempo después la señal no existe en el historial - el indicador hizo demasiados redraws y resulta que entré en el mercado en vano

Ha cometido un error al determinar el cruce: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... debe escribir if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... Y para lo contrario por analogía.

SZY El código debe pegarse pulsando el botón SRC en el panel de la parte superior de la ventana de entrada de texto


Corregido, cerró la operación de la misma manera que en la captura de pantalla anterior, y debería estar donde está la cruz roja.

Estoy de acuerdo en que ExtremeTMA está sobredimensionado, pero supongo que no afecta a la búsqueda de puntos de entrada, lo principal aquí son los filtros. He utilizado el indicador TDI. Adjunto lo que hice (no tengo buenas manos, por eso este EA debe ser manejado adecuadamente). Sólo tengo un problema con él, lleva unas 5 horas en el probador durante 1 año (he cometido un error en alguna parte). Si no es difícil buscar errores.

extern double  Lots             = 0.1;
extern string Сomment           = "TMA Canal2";
extern int TakeProfit           = 20;     //тейкпрофит (отрицательное число или ноль чтобы не использовать);
extern int StopLoss             = 20;     // уровень Stop Loss для покупки;
extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 124;

extern string  Indi             = "ExtremeTMALine";
extern string TimeFrame         = "current time frame";
extern int    HalfLength        = 56;
extern int    Price             = PRICE_CLOSE;
extern double ATRMultiplier     = 2.0;
extern int    ATRPeriod         = 100;
extern bool   Interpolate       = true;
extern double TrendThreshold    = 0.5;
extern bool   Distances         = false;


extern string  Indicatora       = "TradersDynamicIndex";
extern int RSI_Period           = 13;         //8-25
extern int RSI_Price            = MODE_CLOSE;           //0-6
extern int Volatility_Band      = 34;    //20-40
extern int RSI_Price_Line       = 2;      
extern int RSI_Price_Type       = MODE_SMA;      //0-3
extern int Trade_Signal_Line    = 7;   
extern int Trade_Signal_Type    = MODE_SMA;   //0-3
extern bool UseAlerts           = false;

double PriceHigh, PriceLow, SL, TP, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
int ticket;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==3 || Digits ==3) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
         }
      return(0);
}


//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
   
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double PriceHigh, PriceLow, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
   int ticket;

//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
   
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);
   TDIHigh = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 1, 0); // голубая
   TDILow = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 3, 0); // голубая 
   RSIPriceLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 4, 0); // зеленая
   TradeSignalLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 5, 0); // красная
   
   
   if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh || Ask>=PriceHigh && TDIHigh > 68 && RSIPriceLine < TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"TMA Canal2",124,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow || Bid<=PriceLow && TDILow < 32 && RSIPriceLine > TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"TMA Canal2",124,0,Blue);
      return;
     }
//----
  }

  //+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
 
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0); 
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0); 
   
   
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Low[1]<=PriceHigh && Ask>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(High[1]>=PriceLow && Bid<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }

//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
   {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
 
alexey1979621:

Corregido, cerré la operación de la misma manera que en la captura de pantalla anterior, pero donde debería estar la cruz roja.

Estoy de acuerdo en que ExtremeTMA está sobredimensionado, pero supongo que no afecta a la búsqueda de puntos de entrada, lo principal aquí son los filtros. He utilizado el indicador TDI. Adjunté la punta (mis manos no son sencillas, el proyecto de Asesor Experto es como mis manos). Sólo tengo un problema con él, lleva unas 5 horas en el probador durante 1 año (he cometido un error en alguna parte). Si no es difícil buscar errores.

Todavía no he buscado errores, hay mucho que hacer.

Para cerrar la venta donde está la cruz roja, hay que comprobar la barra actual. Si Ask<= nivel de cierre && High[1]>nivel de cierre