[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 282

 
Può dirmi quale? Ne ho solo due. MACD e medie mobili.
 

Per favore, aiutate un principiante. Come scrivere questa sezione di codice:

Controllare gli ordini di mercato e se non ci sono ordini di mercato per il nostro strumento finanziario, lo compriamo?

E abbiamo anche bisogno di una linea di codice che riorganizzi il Trailing Stop a 500 pip di distanza dal prezzo reale.

Aiuto!!!

E qual è la distanza (da dove e verso dove esattamente)?

//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   int cnt, ticket, total;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return(0);  // check TakeProfit
     }
// to simplify the coding and speed up access
// data are put into internal variables
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

   total=OrdersTotal();
   if(total<1) 
     {
      // no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // check for long position (BUY) possibility
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
         MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
      // check for short position (SELL) possibility
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
         MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*Point))
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
                }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0); // exit
              }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
// the end.

Beh, questa è solo una sciocchezza! Se c'è qualche ordine: in sospeso o a mercato, e su qualsiasi strumento finanziario, nessun ordine si aprirà in questo codice:

   total=OrdersTotal();
   if(total<1)

Possiamo vedere che se c'è meno di un ordine, sarà eseguito. O mi sbaglio?

 

Dalla media mobile, prendi CalculateCurrentOrders(Symbol()), restituisce valori = numero di ordini aperti, filtrati per simbolo e magia, con segno = direzione della transazione: per esempio -1 significa 1 ordine in vendita. Se necessario, usate MathAbs() per ignorare il segno.

Dal codice di cui sopra, prendete il trailing stop:

// controllare il trailing stop - qui ci sono anche i commenti.

se(TrailingStop>0) { ... }, è in 2 posti - per comprare e vendere. Tutto è semplice. Oppure, potete usare le funzioni pronte di Igor Kim. Qui c'è un colore speciale. Sono più universali e corretti per il trading reale, ma anche un po' più difficili da capire per un principiante. Se hai una buona fiducia nella nuova versione, otterrai un robot di trading migliore.

p.s. Per il debug, usate Print(), aiuta molto.

 
rusa: Vorrei chiedervi di inserire voi stessi questa funzione in Expert Advisor. Sull'immagine, puoi vedere che sono stati aperti 3 ordini su una barra. Non so come ordinare i miei robot forex e non voglio riscriverli.

Ho iniziato a capire il tuo codice. Sono sorpreso. Quello che avete allegato non può funzionare. Vedo che è assemblato dai pezzi, ma almeno le parentesi dovrebbero essere posizionate correttamente, le variabili dovrebbero essere definite. E il segnale - non è chiaro, cosa significa, per esempio, "rsi>30" - valore RSI dell'indicatore, o qualcos'altro? La funzione Trade_BUY() è collegata all'interno della funzione start... ecc.

O mi dai il codice completo che ha funzionato (ordini aperti) o compila TOR per i segnali, trailing, ecc. Sarà più facile per me scrivere da zero.

 
nuan:

Avete istruzioni dettagliate su come scaricare le quotazioni per MICEX per 2 anni, per esempio per Lukoil.

come convertirli ulteriormente in modo corretto e aprirli in mt4, se ci sono dei link date i link come fare questo.

P.S. Grazie in anticipo.


Ecco un mamba per qualche anno
http://zalil.ru/31909547
 
kolyango:

Per favore, aiutate un principiante. Come scrivere questa sezione di codice:

Controllare gli ordini di mercato e se non ci sono ordini di mercato per il nostro strumento finanziario, lo compriamo?

E abbiamo anche bisogno di una linea di codice che riorganizzi il Trailing Stop a 500 pip di distanza dal prezzo reale.

Aiuto!!!

E qual è la distanza (da dove e verso dove esattamente)?

Beh, questa è solo una sciocchezza! Se c'è qualche ordine: in sospeso o a mercato, e per qualsiasi strumento finanziario, nessun ordine si aprirà in questo codice:

Possiamo vedere che se c'è meno di un ordine, sarà eseguito. O mi sbaglio?


O forse si sbaglia?

per (int i = 0; i < OrdiniTotali(); i++)
{
OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == . pair)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
OrderSend(Symbol(),OP_BUY, .......

}
}
}

 

Ho bisogno di aiuto:

un normale indicatore di media mobile , quando la linea si rompe, appare il segnale di acquisto (su) o di vendita (giù),

Qualcuno ha un codice finito dell'oggetto grafico, può postarlo!

Grazie.

 
questi sono nel database
 
ZZZEROXXX:
Questi sono nel database.
Un link sarebbe apprezzato.
 

Ciao, puoi dirmi come fare il "loop" del controllo della barra su/giù? Cioè, come posso descrivere questa condizione "più corta"?

Close[0]>Open[0]&& Close[1]>Open[1]&& Close[2]>Open[2]&& Close[3]>Open[3]&&& Close[4]>Open[4]&& Close[5]>Open[5]&& Close[6]>Open[6]&& Close[7]>Open[7]

Grazie in anticipo.