Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 89

 
Omm:

como posso determinar a hora do dia de negociação em futuros?

MarketInfo(Símbolo(),MODE_STARTING)

MarketInfo(Símbolo(),MODE_EXPIRATION)

devolve zeros


qual corretor?

Portanto, antes de mais nada, você deve verificar com seu corretor.

 
alexey1979621:
Caros membros do fórum, como escrever a condição de atravessar a linha do canal pelo preço em seu consultor especializado, por exemplo, o preço atravessa a linha do canal de cima e o comércio é aberto ou fechado? Por favor, note que estou interessado no momento deste crossover. Eu ficaria feliz em ajudar.

double price0=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 0),Digits)); - valor de sua linha na barra 0.

double price1=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 1),Digits)); - valor de sua linha na barra 1.

E a maneira mais simples de determinar o momento da quebra na barra de zero: if(High[0]>price0 && High[1]<=preço1) {a linha rompeu para cima}, if(Low[0]<price0 && Low[1]>=preço1) {a linha rompeu para baixo}. Os ifs serão VERDADEIROS desde o momento da descoberta até o final da barra atual. É desejável que sua linha de canal tenha a propriedade OBJPROP_RAY===True

 
alexey1979621:
Caros membros do fórum, como fazer uma condição em um EA para atravessar a linha do canal, por exemplo, se o preço atravessa a linha do canal de cima e um negócio é aberto ou fechado? Por favor, note que estou interessado no momento deste crossover. Eu ficaria feliz em ajudar.

De duas maneiras:

Se Ask > linha de canal e Low[1] <=linha de canal, atravessar para cima

Se Bid < linha de canal e High[1] >=linha de canal, cruzar para baixo

Você pode verificar com MA com o período 1

 
como posso selecionar o último pedido FECHADO no software e obter informações a partir dele?
 
Obrigado por sua ajuda

. Devo ter colocado a pergunta incorretamente, eu deveria ter anexado parte do código. Eu estou corrigido.

Como sugerido por

artmedia70 indicou a interseção a ser fechada da seguinte forma Ele fecha o negócio de acordo com a captura de tela. Mas precisamos fechar o negócio onde a cruz está

verificação nula CheckForClose()
{
preço duplo alto, preço baixo;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) voltar;

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)==falso) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continua;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Baixo[1]<=PriceHigh && Ask>==PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
pausa;
}
if(OrderType()==OP_SELL)
{
if(High[1]>=PriceLow && Bid<==PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
pausa;
}
}
//----
}

 
 
webip:
como selecionar o último pedido FECHADO no software e obter informações a partir dele?

Você pode encontrar o que quiser.
 
alexey1979621:
Obrigado por sua ajuda

. Devo ter colocado a pergunta incorretamente, eu deveria ter anexado parte do código. Eu estou corrigido.

Como sugerido por

artmedia70 indicou a interseção a ser fechada da seguinte forma O negócio está sendo fechado de acordo com a captura de tela. Mas precisamos fechar o negócio onde a cruz está

verificação nula CheckForClose()
{
preço duplo alto, preço baixo;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) voltar;

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)==falso) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continua;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Baixo[1]<=PriceHigh && Ask>==PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
pausa;
}
if(OrderType()==OP_SELL)
{
if(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
pausa;
}
}
//----
}

ExtremeTMA - ExtremeTMA - ExtremeTMA - ExtremeTMA É um grande pedaço de história - as últimas 30 barras, se não mais. Eu o usei para escrever um Expert Advisor - é uma droga. Imagine: aparece um sinal, eu o alcancei, mas algum tempo depois o sinal não existe na história - o indicador redesenhado e acontece que eu entrei por nada.

Você cometeu um erro ao determinar a travessia: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... você deve escrever if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... E pelo contrário, por analogia.

Insira o código com o botão SRC no painel na parte superior da janela de entrada de sua mensagem

ZZZY Então, onde está a imagem da tela com a cruz?

 
artmedia70:

ExtremeTMA - eles são impiedosos. E um enorme pedaço de história - as últimas 30 barras, se não mais. Eu o usei para escrever um Expert Advisor - é uma droga. Imagine: recebi um sinal, entrei nele, e algum tempo depois o sinal não existe na história - o indicador fez demasiados ruídos e acontece que entrei no mercado em vão.

Você cometeu um erro ao determinar a travessia: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... você deve escrever if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... E pelo contrário, por analogia.

SZY O código deve ser colado pressionando o botão SRC no painel na parte superior da janela de entrada de texto


Corrigido, fechou o comércio da mesma forma que na captura de tela acima, e deve estar onde está a cruz vermelha.

Concordo que ExtremeTMA redraws, mas acho que não afeta a busca por pontos de entrada, o principal aqui são os filtros. Eu usei o indicador TDI. Anexei o que fiz (não tenho boas mãos, é por isso que esta EA deve ser tratada adequadamente). Tenho apenas um problema com ele, leva cerca de 5 horas no testador durante 1 ano (cometi um erro em algum lugar). Se não for difícil procurar por erros.

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:

Corrigido, fechou o comércio da mesma forma que na foto acima, mas onde a cruz vermelha deveria estar.

Eu concordo que o ExtremeTMA está com um desenho a mais, mas acho que isso não afeta a busca por pontos de entrada, o principal aqui são os filtros. Eu usei o indicador TDI. Anexei a ponta (minhas mãos não são direitas, o projeto Expert Advisor é como minhas mãos). Tenho apenas um problema com ele, leva cerca de 5 horas no testador durante 1 ano (cometi um erro em algum lugar). Se não for difícil procurar por erros.

Ainda não procurei por erros - muito o que fazer.

Para fechar Sell onde está a cruz vermelha, você precisa verificar a barra atual. Se Ask<== nível fechado && Alto[1]> nível fechado