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

 

Non riesco a risolvere il problema, sto diventando noioso e la birra non aiuta.

L'ho fatto:

1 - ci sono 30 EAs che lavorano su un grafico o simbolo e tutti hanno numeri Medgic diversi

2- Ogni EA ha 3-5 ordini aperti ...

Il compito è quello di stampare tutti i numeri in una barra su un grafico e il totale dei profitti e delle perdite su di essi...

Sto scavando ma non arrivo da nessuna parte:

  #define  MagicN 0
#define  MagProf 1
 ArrayResize(mags,100,1000);ArrayInitialize(mags,0);  
   for(int f=OrdersTotal()-1; f>=0; f--)
      if(OrderSelect(f,SELECT_BY_POS))
              {
               for(int z=100-1; z>=0; z--)
                 {
                  if(mags[z][MagicN]==OrderMagicNumber())
                  mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();

                  if(mags[z][MagicN]!=OrderMagicNumber())
                    {
                     mags[z][MagicN]=OrderMagicNumber();
                     mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
                    }
                 }
              }

La brava gente aiuta chi può!!! )))))))

 
VOLDEMAR:

Non riesco a risolvere il problema, sto diventando noioso e la birra non aiuta.

L'ho fatto:

1 - ci sono 30 EAs che lavorano su un grafico o simbolo e tutti hanno numeri Medgic diversi

2- Ogni EA ha 3-5 ordini aperti ...

Il compito è quello di stampare tutti i numeri in una barra su un grafico e il totale dei profitti e delle perdite su di essi...

Sto scavando ma non arrivo da nessuna parte:

La brava gente aiuta chi può!!! )))))))


Creiamo un array bidimensionale. Nella prima dimensione memorizziamo il profitto accumulato, nella seconda dimensione memorizziamo il majik.

Quando elaboriamo gli ordini, cerchiamo un numero magico nell'array, se non lo troviamo, aumentiamo l'array, se lo troviamo, aumentiamo il profitto.

Dopo aver completato l'elaborazione, visualizziamo il risultato sullo schermo

 
Vinin:


Crea un array bidimensionale. Nella prima dimensione, immagazziniamo il profitto accumulato, e nella seconda dimensione, il mejic.

Durante l'elaborazione degli ordini, cerchiamo gli ordini nell'array, se non li troviamo, aumentiamo l'array, se li troviamo, aumentiamo il profitto.

Al termine dell'elaborazione, visualizzare il risultato sullo schermo


Non è quello che ho scritto?
 
VOLDEMAR:

Non è quello che c'è scritto?

Non esattamente. Dove si definisce la dimensione dell'array e si cerca un indice su Magik. Non l'ho visto.
 
for(int f=OrdersTotal()-1; f>=0; f--) // ricerca degli ordini
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// secondo ciclo sul numero di elementi nell'array
{
if(mags[z][MagicN]==OrderMagicNumber()) // se esiste già un MagicNumber, aggiungiamo il profitto
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
}
else /se non c'è un mag
{
ArrayResize(mags,z,1000); // espande l'array
mags[z][MagicN]=OrderMagicNumber(); // memorizza il mag
}
}

}

Ma con questo costrutto, il terminale non fa il test, dice errore critico

 
VOLDEMAR:
for(int f=OrdersTotal()-1; f>=0; f--) // ricerca degli ordini
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// secondo ciclo sul numero di elementi nell'array
{
if(mags[z][MagicN]==OrderMagicNumber()) // se esiste già un MagicNumber, aggiungiamo il profitto
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
}
else /se non c'è un mag
{
ArrayResize(mags,z,1000); // espande l'array
mags[z][MagicN]=OrderMagicNumber(); // memorizza il mag
}
}

}

Ma con questo costrutto, il terminale non fa il test, dice errore critico


Cos'è la variabile MagicN e dove cambia?
 
nella definizione ha il parametro 0 e MagProf nella definizione ha il valore 1
 
VOLDEMAR:
nella definizione ha un parametro 0 e MagProf nella definizione ha un valore di 1


Prova questo

#define MagicN 0
#define MagProf 1
double mags[10][2];
int CountMagic=0;

void CalcMagic()
  {
   for(int f=OrdersTotal()-1; f>=0; f--) // перебор ордеров
      if(OrderSelect(f,SELECT_BY_POS))
        {
         mags[FindMaic(OrderMagicNumber())][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
        }

  }
//+------------------------------------------------------------------+

int FindMaic(int Magic)
  {
   int Res=-1;
   for(int i=0;i<CountMagic;i++)
     {
      if(mags[i][MagicN]==Magic)
         Res=i;
      break;
     }
   if(Res==-1)
     {
      Res=CountMagic;
      CountMagic++;
      if(CountMagic>=ArrayRange(mags,0))
        {
         ArrayResize(mags,CountMagic+10);
        }

     }

   return(Res);
  }
//+------------------------------------------------------------------+

Negli array multidimensionali, la dimensionalità può essere definita usando ArrayRange()

 
C'è uno StopLetter e un Freeswell che posso ottenere attraverso marketinfo, ma c'è la stessa restrizione, ma che riguarda la data minima di scadenza, di solito è 15 minuti. Cioè, se metto un ordine pendente, il tempo minimo dopo il quale si auto-cancellerà, se non attivato, è 15 minuti. Questa è la domanda - come faccio a conoscere questo limite programmaticamente?
 
Desead:
C'è uno stopplay e freezevel che posso ottenere attraverso marketinfo, e c'è la stessa restrizione, ma che riguarda la data di scadenza minima, di solito è 15 minuti. cioè, se metto un ordine pendente, il tempo minimo dopo il quale si auto-cancellerà, se non attivato, è 15 minuti. Questa è la domanda - come faccio a conoscere questo limite programmaticamente?

Chiedete al vostro broker! Alcuni non eseguono una scadenza.

Non lo metto in un ordine ma lo tolgo secondo i termini.

Motivazione: