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

 
artmedia70:

IMHO - è meglio trovare il tuo ordine e vedere se è a mercato o chiuso, e come ha chiuso, a take, stop o manualmente. Da qui dovreste iniziare a ballare in diverse direzioni.

Allora tutto sarà accurato. Ma le variabili globali possono essere perse...


Cosa intendi per "perdere le variabili"? Intendi trovare in modo che l'EA controlli anche questo?
 
Begemot7:
Per favore, chiarisci cosa intendi per perdere le variabili? Intendi anche trovarle in modo che l'EA le controlli?

In tutti gli EAs per il trading reale e demo, non memorizzo alcun dato importante su ordini e posizioni in variabili. Al massimo posso scrivere i dati, che sono necessari per la logica dell'EA, nel commento dell'ordine. Quando ho bisogno di scoprire se ci sono posizioni, quante ce ne sono, se ci sono ordini, posizioni chiuse, come si sono chiuse, eseguo un ciclo su posizioni/ordini di mercato o dati storici, trovo l'ordine di cui ho bisogno e recupero le informazioni necessarie. Così, non memorizzo tutte le informazioni importanti nelle variabili, poiché possono essere perse durante un arresto imprevisto del computer. Può sempre essere recuperato in seguito. Ho provato a memorizzarlo nelle variabili globali del terminale - si è scoperto che l'informazione non è sempre salvata lì quando il computer si blocca. E per me, supervisionare costantemente la scrittura di informazioni fresche è un problema troppo grande... Trovo più facile trovare ciò di cui ho bisogno nel momento in cui ne ho bisogno.
 
PapaYozh:

È possibile ottenere le coordinate del punto in cui l'indicatore è stato lasciato cadere utilizzando le funzioni:

WindowXOnDropped()

WindowYOnDropped()

Prezzo e tempo:

WindowPriceOnDropped()

WindowTimeOnDropped()


Cercherò di costruirlo. Un esempio sarebbe simile...
 

Mi trovo di fronte a una strana situazione. Potresti per favore dirmi...

Ci sono tre EA scritti in proprio. La strategia è la stessa, solo un'implementazione diversa, a seconda dello strumento. Coppie: EURUSD, EURGBP e USDJPY. Ho un buon rapporto di lavoro con i primi due, ma l'ultimo non funziona. Il broker è FX-Trend. Il mio conto è un conto mini con il lotto minimo 0,01 (è stato usato finora per i test).

Allo stesso tempo: tutto va bene su un conto demo. Quando lo eseguo nel tester, i trade sono aperti sullo stesso conto reale nel tester. Ma non lo fanno durante il trading reale. I marcatori del grafico di apertura dell'ordine (e tutti gli altri marcatori) sono posizionati con successo. Non c'è assolutamente nulla nei registri.

Il tutto gira su un VPS.


Credo che queste siano tutte le informazioni. Sarei grato per qualsiasi suggerimento su quale direzione scavare.

 
Sepulca:

Meglio così (nel caso in cui l'EA venga riavviato):



Se c'è solo un ordine, possiamo farne a meno.


se(OrdiniTotali()<1)

{

}

......

 
artmedia70:
Non memorizzo alcun dato importante su ordini e posizioni in variabili in tutti gli EAs reali e demo. Il massimo che posso scrivere i dati necessari per la logica EA è nel commento dell'ordine. Quando ho bisogno di scoprire se ci sono posizioni, quante ce ne sono, se ci sono ordini, posizioni chiuse, come si sono chiuse, eseguo un ciclo su posizioni/ordini di mercato o dati storici, trovo l'ordine che mi serve e recupero le informazioni che mi servono. In questo modo, non memorizzo tutte le informazioni importanti nelle variabili, poiché possono essere perse durante uno spegnimento imprevisto del computer. Può sempre essere recuperato in seguito. Ho provato a memorizzarlo nelle variabili globali del terminale - si è scoperto che l'informazione non è sempre salvata lì quando il computer si blocca. E per me, supervisionare costantemente la scrittura di informazioni fresche è un problema troppo grande... Trovo più facile trovare ciò di cui ho bisogno nel momento in cui ne ho bisogno.

Proprio così... ...vorrei prendere ulteriori precauzioni. È più corretto, naturalmente, passare attraverso tutti gli ordini. Ma questo è un caso specifico. Se abbiamo perso GlobalVariables, dovremmo lasciare questa società di intermediazione. Le GlobalVariables sono memorizzate non sul vostro computer, ma nella società di intermediazione fino a tre mesi se le lasciate intatte. O mi sbaglio?
 
Sembra che l'abbia capito da solo :). È vero quello che si dice - l'importante è formularlo. In generale, quando eseguiamo sul mercato, impostiamo stop e prendiamo posizioni a zero. E poi lo impostiamo correttamente. Forse qualcuno lo troverà utile...
 
Sepulca:
Proprio così... una rassicurazione in più. La cosa giusta da fare, ovviamente, è esaminare tutti gli ordini. Ma questo è un caso specifico. E se GlobalVariables si perde, dovremmo lasciare questa società di intermediazione.

Cosa vuoi dire - questa società di intermediazione lo fa di proposito? Mi è stato detto che MT4 è un terminale che può essere facilmente controllato dal broker e quindi ci possono essere molti imbrogli, chi ne ha sentito parlare?
 
Begemot7:

Voglio dire, il DC lo fa di proposito? Mi è stato detto che MT4 è un terminale che può essere facilmente controllato da un broker e quindi sono possibili molti imbrogli, chi ne ha sentito parlare?


Non capisco bene. Che senso ha che DC distrugga le vostre variabili globali, a meno che, ovviamente, non ne abbiate accumulato un mucchio x....... Citazione dalla documentazione:
"Le variabili globali del terminale client non devono essere confuse con le variabili dichiarate nell'ambito globale del programma MQL4. Le variabili globali esistono nel terminale client per 4 settimane dall'ultimo accesso, dopo di che vengono automaticamente cancellate. Un accesso a una variabile globale non è solo l'impostazione di un nuovo valore, ma anche la lettura del valore della variabile globale. Le variabili globali del terminale client sono accessibili contemporaneamente da tutti i programmi MQL4 lanciati nel terminale client. "Se si lavora con 0,01 o 0,1 lotto, non si è oppressi, perché è un'inezia.... Ma se hai aperto 100 lotti sul conto reale, è meglio che tu sia pronto a combattere per i tuoi soldi.

 

Ho bisogno dell'aiuto dei professionisti!!! Mi sono già scervellato con questo codice... Ci sono 4 buffer, 2 di loro funzionano correttamente (Buffer &buffer2), ma gli altri 2 no. Quando si verifica una certa condizione il buffer viene riempito, quando questo valore sale per uno e scende per il secondo, i buffer vengono rimossi (azzerati), ma i restanti 2 buffer sono ancora appesi nel grafico. Puoi dirmi come risolvere il problema?

      //--- Функция расчета буферов CountZZ(BuferUp,BuferDn,iPeriod,Dev,Step);
int CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer1[], double& ExtMapBuffer2[], double& ExtMapBuffer3[], int ExtDepth, int ExtDeviation, int ExtBackstep )
{
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,lastlow1,lasthigh1;
   int count = iBars(pair,tf)-ExtDepth;

   for(shift=count; shift>=0; shift--)
     {
     //--- Расчитываем буфер BuferUp
      val = iLow(pair,tf,iLowest(pair,tf,MODE_LOW,ExtDepth,shift));
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((iLow(pair,tf,shift)-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
              }
           }
        }
       
          ExtMapBuffer[shift]=val;
      //--------------------------------------------------------------------    
          
     //--- Расчитываем буфер BuferUp2
      if (ExtMapBuffer[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMin(val,MathMin(iHigh(pair,tf,shift+1),iHigh(pair,tf,shift-1)));}
      if(ExtMapBuffer[shift+back]==0.0) ExtMapBuffer1[shift+back]=0.0;
      } 
          ExtMapBuffer1[shift]=val;
      //--------------------------------------------------------------------    
          
      //--- Расчитываем буфер BuferDn
      val=iHigh(pair,tf,iHighest(pair,tf,MODE_HIGH,ExtDepth,shift));
     
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-iHigh(pair,tf,shift))>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
              }
           }
        }
      ExtMapBuffer2[shift]=val;
      //-------------------------------------------------------------------
      
      //--- Расчитываем буфер BuferDn2
      if (ExtMapBuffer2[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMax(val,MathMax(iLow(pair,tf,shift-1),iLow(pair,tf,shift+1)));}
      if(ExtMapBuffer2[shift+back]==0.0) ExtMapBuffer3[shift+back]=0.0;
      }
      ExtMapBuffer3[shift]=val;
      //-------------------------------------------------------------------
      
     }
           
   // Отсееваем ненужные значения
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=count; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0)
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           }
         lasthigh=-1;
        }
     }
 
   for(shift=iBars(pair,tf)-1; shift>=0; shift--)
   {
      if(shift>=count) ExtMapBuffer[shift]=0.0;
         else
         {
            res=ExtMapBuffer2[shift];
            if(res!=0.0) ExtMapBuffer2[shift]=res;
         }
   }
}

Motivazione: