[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 47

 

Cari specialisti del forum, che anche prima non capivano quasi nulla.

Sto cercando di scrivere un semplice Expert Advisor che utilizza l'indicatore Parabolic Sar come strumento di formazione. La sua azione dovrebbe essere elementare: se il prezzo era sotto il valore Sar e poi è salito, allora dovremmo comprare esattamente nel momento in cui il prezzo attraversa l'indicatore ed esattamente una volta con l'impostazione di stop loss e take profit di 10 punti. E se è viceversa, allora vendi.

Il problema è che compra e vende sempre, ma lo fa mentre c'è denaro libero sul deposito, non una volta. In altre parole, non appena il prezzo sale sopra il livello di Sar, egli compra continuamente fino a quando il prezzo è più alto, e non appena il prezzo è sotto Sar, egli vende continuamente fino a quando il prezzo è sotto.

In effetti, la domanda è: come fare in modo che il nostro EA faccia un solo affare quando appaiono queste condizioni, e non una serie infinita di esse?

Ecco il codice del mio Expert Advisor.

//+------------------------------------------------------------------+
//|                                    Current_sar_value_summary.mq4 |
//|                                         Орлов Денис Владимирович |
//|                                                 orlovkem@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Орлов Денис Владимирович"
#property link      "orlovkem@mail.ru"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
                     //объявляем переменные
   double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены
   int _ticket;      //возвращает количество открытых позиций
   
   _sar_value=iSAR(0,0,0.02,0.2,0);//приравнял переменную _sar_value к текущему значению индикатора Сар
   _price=Bid;                      //приравнял переменную _price к текущему уровню цены Бид
   
   //описываем условие покупки: если уровень цены был ниже значения сар
   if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем
                {
                   Alert("Надо покупать");
                   _ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-10*Point,Ask+10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                 
                }
                 return(0);
           }
 
         
   if(_price>_sar_value)//описываем условие покупки: если уровень цены был выше значения сар
         {
           if(_price<=_sar_value)// а потом стал ниже, то продаем
            {
                   Alert("Надо продавать");
                   _ticket=OrderSend(Symbol(),OP_SELL,1,Bid,1,Ask+10*Point,Bid-10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                   
            }
            return(0);
            
         }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Voglio chiedervi di aiutarmi, vi prometto che quando diventerò un guru, non ignorerò le richieste delle persone come me.

Saluti, Denis Orlov.

 
orlovkem >> :

Cari specialisti del forum, che anche prima non capivano quasi nulla.

Sto cercando di scrivere un semplice Expert Advisor che utilizza l'indicatore Parabolic Sar come strumento di formazione. La sua azione dovrebbe essere elementare: se il prezzo era sotto il valore Sar e poi è salito, allora dovremmo comprare esattamente nel momento in cui il prezzo attraversa l'indicatore ed esattamente una volta con l'impostazione di stop loss e take profit di 10 punti. E se è viceversa, allora vendi.

Il problema è che compra e vende sempre, ma lo fa mentre c'è denaro libero sul deposito, non una volta. In altre parole, non appena il prezzo sale sopra il livello di Sar, egli compra continuamente fino a quando il prezzo è più alto, e non appena il prezzo è sotto Sar, egli vende continuamente fino a quando il prezzo è sotto.

In effetti, la domanda è: come fare in modo che il nostro EA faccia un solo affare quando appaiono queste condizioni, e non una serie infinita di esse?

Ecco il codice del mio Expert Advisor.

Voglio chiedervi di aiutarmi. Vi prometto che quando diventerò un guru, non ignorerò le richieste di altri manichini come me.

Sinceramente, Denis Orlov.

Dove tenete il valore predittivo dell'indicatore? (in quale variabile...?) la stessa cosa con il valore del prezzo

double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены

 
lascu.roman >> :

e dove avete il valore precedente dell'indicatore? (in quale variabile...?) lo stesso con il valore del prezzo

Il punto è che il valore dell'indicatore precedente è sulla candela precedente e il prezzo incrocia il valore dell'indicatore sulla candela attuale.

È lo stesso con il prezzo, cosa significa "valore del prezzo precedente", il prezzo del tick precedente? o la chiusura della candela precedente, ma non è questo.

Capisco che devo aggiungere qualcosa, ma cosa esattamente non riesco a capire. Per favore aiutatemi, questa è la mia prima esperienza.

>> Rispettosamente, Orlov Denis.

 
orlovkem >> :

Il punto è che il valore dell'indicatore precedente è sulla candela precedente e il prezzo incrocia il valore dell'indicatore sulla candela attuale.

È lo stesso con il prezzo, cosa significa "valore del prezzo precedente", il prezzo del tick precedente? o la chiusura della candela precedente, ma non è questo.

Capisco che devo aggiungere qualcosa, ma cosa esattamente non riesco a capire. Aiuto per favore, questa è la mia prima esperienza.

Cordialmente, Orlov Denis.

Ha capito quello che ha detto, allora? State controllando il valore in un dato momento.

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Due condizioni che si escludono a vicenda. Quando è diventato più alto?

 
Roger >> :

Ha capito quello che ha detto, allora? Stai controllando il valore in un dato momento.

Due condizioni che si escludono a vicenda. Quando è diventato più alto?

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Forse ho formulato male il commento, ma l'essenza è ancora vera, il livello del prezzo è diventato più alto del valore dell'indicatore, tu devi comprare e lui compra, ma devi farlo una volta, e l'EA compra finché c'è denaro sul deposito. Dovete solo limitare il numero di offerte. Non farne più di uno alla volta, è questo che non funziona.

 
xruss >> :

ma se c'era un ordine Sell nella storia e poi l'Expert Advisor lo ha chiuso (nel tipo di storia, esso (la sua chiusura) è mostrato come t/p o s/l - sarà considerato come l'ultimo?

Se un ordine (acquisto o vendita) è stato chiuso per ultimo (l'Expert Advisor l'ha chiuso, o è scattato t/p o s/l) e passa nelle condizioni di

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

allora di conseguenza sarà considerato ultimo. Quale effetto particolare non si può ottenere?
 
Everlost >> :

Se un ordine (acquisto o vendita) è stato chiuso per ultimo (Expert Advisor l'ha chiuso, o è scattato il t/p o s/l) e passa le condizioni

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

allora, di conseguenza, sarà considerato come l'ultimo. E qual è esattamente l'effetto che non si può ottenere?

Sì, probabilmente è perché ho escluso OrderMagicNumber() dal codice

Voglio evitare di riaprire gli ordini dopo che sono stati chiusi. Voglio fare in modo che i miei ordini non si riaprano dopo la chiusura (a volte succede che le condizioni di riapertura esistono ancora). La stessa storia con la vendita. Ho pensato che sarebbe stato bello indicare nelle mie condizioni se avevo una posizione di acquisto e avevo profitto - non riaprire la posizione di acquisto).

((

 
xruss писал(а) >>

Sì, probabilmente è perché ho escluso OrderMagicNumber() dal codice

Voglio fare in modo che gli ordini non si riaprano dopo la chiusura. Ho pensato che sarebbe stato bello se avessi specificato nelle condizioni, se avevo una posizione Buy e avevo un profitto - di non riaprire Buy di nuovo. Ma si apre ancora - bastardo!)))

((

Il modo più semplice per controllare il numero di ordini aperti contemporaneamente

if(OrdersTotal()<1){

   .................
   .................
   условия установки ордеров 

}
 
goldtrader >> :

Leggi la descrizione di OrderSend( ... ).

Il numero magico (magik) viene assegnato a un ordine quando viene inviato al server.

Questo è usato principalmente per identificare ordini/posizioni in sospeso.

Cioè, in modo che l'EA non tocchi ordini "alieni". Questo viene fatto da un EA o da uno script.

Il Mago non può essere impostato manualmente. Sei tu stesso ad impostare le regole nell'EA/Script.

Il mago è di solito statico, ma può essere dinamico se necessario.

Guardate alcuni semplici esempi di Kodobase, e dovrebbe diventarvi chiaro.

Perché non potete identificare i "vostri" ordini per numero di biglietto? Sono unici, non importa quanti Expert Advisors siano in funzione.

Per esempio, un EA apre un ordine, ricorda il ticket, lo chiude e lo dimentica.

 
mukata >> :

Perché non potete identificare i "vostri" ordini con il numero del biglietto? Sono unici, non importa quanti Expert Advisors siano in funzione.

Per esempio, un EA apre un ordine, ricorda il biglietto e lo dimentica, dopo di che lo chiude.

Chubais taglierà l'elettricità e poi scoprirà dove sono gli altri e dove si trovano.
Motivazione: