Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 89

 
Omm:

come posso determinare il tempo di trading giornaliero nei futures?

MarketInfo(Symbol(),MODE_STARTING)

MarketInfo(Symbol(),MODE_EXPIRATION)

restituisce degli zeri


Quale broker?

Quindi, prima di tutto, dovreste controllare con il vostro broker.

 
alexey1979621:
Cari membri del forum, come scrivere la condizione di attraversamento della linea del canale da parte del prezzo nel vostro Expert Advisor, per esempio, il prezzo attraversa la linea del canale dall'alto e il commercio è aperto o chiuso? Si prega di notare che sono interessato al momento di questo crossover. Sarei felice di aiutare.

double price0=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 0),Digits)); - valore della vostra linea sulla barra 0.

double price1=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 1),Digits)); - valore della vostra linea sulla barra 1.

E il modo più semplice per determinare il momento della rottura sulla barra zero: se(High[0]>prezzo0 && High[1]<=prezzo1) {la linea ha rotto verso l'alto}, se(Low[0]<prezzo0 && Low[1]>=prezzo1) {la linea ha rotto verso il basso}. Gli if saranno TRUE dal momento della rottura fino alla fine della barra corrente. È auspicabile che la vostra linea di canale abbia la proprietà OBJPROP_RAY==True

 
alexey1979621:
Cari membri del forum, come fare una condizione in un EA per l'attraversamento della linea del canale, per esempio, se il prezzo attraversa la linea del canale dall'alto e viene aperto o chiuso un affare? Si prega di notare che sono interessato al momento di questo crossover. Sarei felice di aiutare.

Un paio di modi:

Se Ask > linea del canale e Low[1] <=linea del canale, incrocia verso l'alto

Se Bid < linea del canale e High[1] >=linea del canale, incrocia verso il basso

Potete controllare con MA con il periodo 1

 
come posso selezionare l'ultimo ordine CHIUSO nel software e ottenere informazioni da esso?
 
Grazie per il vostro aiuto

. Devo aver posto male la domanda, avrei dovuto allegare parte del codice. Mi correggo.

Come suggerito da

artmedia70 ha indicato l'incrocio da chiudere come segue. Chiude l'affare secondo lo screenshot. Ma dobbiamo chiudere l'affare dove c'è la croce

void CheckForClose()
{
doppio PriceHigh, PriceLow;
//---- go trading solo per i primi tik del nuovo bar
se(Volume[0]>1) ritorno;

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()) continua;
//---- controllare il tipo di ordine
if(OrderType()==OP_BUY)
{
if(Low[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:
come si può selezionare l'ultimo ordine CHIUSO nel software e ottenere informazioni da esso?

Puoi trovare tutto quello che ti piace.
 
alexey1979621:
Grazie per il vostro aiuto

. Devo aver posto male la domanda, avrei dovuto allegare parte del codice. Mi correggo.

Come suggerito da

artmedia70 ha indicato l'incrocio da chiudere come segue. L'affare si sta chiudendo secondo lo screenshot. Ma dobbiamo chiudere l'affare dove c'è la croce

void CheckForClose()
{
doppio PriceHigh, PriceLow;
//---- go trading solo per i primi tik del nuovo bar
se(Volume[0]>1) ritorno;

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()) continua;
//---- controllare il tipo di ordine
if(OrderType()==OP_BUY)
{
if(Low[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 - un'esagerazione empia. È un bel pezzo di storia - le ultime 30 battute, se non di più. L'ho usato per scrivere un Expert Advisor - fa schifo. Immaginate: appare un segnale, l'ho raggiunto, ma qualche tempo dopo il segnale non esiste sulla storia - l'indicatore viene ridisegnato e si scopre che sono entrato per niente

Hai fatto un errore nel determinare l'incrocio: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... dovreste scrivere if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... E per l'opposto per analogia.

Inserisci il codice con il pulsante SRC nel pannello nella parte superiore della finestra di input del tuo messaggio

ZZZY Dov'è lo screenshot con la croce?

 
artmedia70:

ExtremeTMA - sono empiamente sovraccarichi. E un'enorme fetta di storia - le ultime 30 battute, se non di più. L'ho usato per scrivere un Expert Advisor - fa schifo. Immaginate: ho ricevuto un segnale, sono entrato, e qualche tempo dopo il segnale non esiste nella storia - l'indicatore ha fatto troppi ridisegni e si scopre che sono entrato nel mercato invano

Hai fatto un errore nel determinare l'incrocio: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... dovreste scrivere if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... E per l'opposto per analogia.

SZY Il codice deve essere incollato premendo il pulsante SRC nel pannello in alto della finestra di inserimento del testo


Corretto, ho chiuso il trade allo stesso modo come nello screenshot sopra, e dovrebbe essere dove c'è la croce rossa.

Sono d'accordo che ExtremeTMA ridisegna, ma immagino che non influisca sulla ricerca dei punti di ingresso, la cosa principale qui sono i filtri. Ho usato l'indicatore TDI. Ho allegato quello che ho fatto (non ho buone mani, ecco perché questo EA dovrebbe essere gestito correttamente). Ho solo un problema con esso, ci vogliono circa 5 ore in tester per 1 anno (ho fatto un errore da qualche parte). Se non è difficile cercare gli errori.

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:

Corretto, chiuso il trade allo stesso modo come nello screenshot sopra, ma dove la croce rossa dovrebbe essere.

Sono d'accordo sul fatto che ExtremeTMA è in overdrawing, ma credo che non influisca sulla ricerca di punti di ingresso, la cosa principale qui sono i filtri. Ho usato l'indicatore TDI. Ho allegato la punta (le mie mani non sono semplici, il progetto Expert Advisor è proprio come le mie mani). Ho solo un problema con esso, ci vogliono circa 5 ore in tester per 1 anno (ho fatto un errore da qualche parte). Se non è difficile cercare gli errori.

Non ho ancora cercato gli errori - c'è molto da fare.

Per chiudere Sell dove si trova la croce rossa, è necessario controllare la barra corrente. Se Ask<= livello di chiusura && High[1]> livello di chiusura