Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 367

 
Artyom Trishkin:

Onestamente non ho mai usato queste risorse di SB. Ma cosa vi impedisce di guardare nel SB dove lì, con quali metodi, sono fissati i colori. Quello che avete mostrato nell'annuncio:

- sono nomi di oggetti - classi CPanel, CEdit, CBmpButton e CWndClient.

E avete bisogno di trovare i nomi dei membri di queste classi dove sono memorizzati i colori e usare quali metodi possono essere inizializzati o modificati.

E probabilmente dovrete inizializzarli prima e poi costruire l'oggetto stesso.

I colori sono definiti in Defines, e poi gli oggetti sono colorati attraverso ObjectSetInteger(). Per ora sto anche dipingendo direttamente con questo metodo. Ma mi piacerebbe provarlo attraverso OOP. Come vedo, se non c'è un metodo pubblico separato da modificare, non c'è modo di arrivare al membro privato. Non sono così esperto di ereditarietà e metodi virtuali, sto ancora "nuotando" e studiando l'argomento. Ok, proverò a chiedere al service-desk di fare un metodo pubblico per la colorazione, e se è possibile farlo in un altro modo, forse mi diranno come.
 
LRA:
Clicca sul messaggio di errore. Il cursore indicherà il nome della variabile. Deve essere dichiarato
Grazie!
 
Kedrov:
Grazie!

Non dovresti postare codice decompilato su questo forum. Capisco che non hai postato del codice, solo una foto. Ma significa che state lavorando con prodotti software rubati. Questo è fortemente scoraggiato qui - questo è... come posso dire... una violazione dell'etica comunitaria. Qui sul forum e la parte del leone delle risorse degli utenti del forum sono programmatori - scriviamo il nostro codice o usiamo i lavori pubblici dei nostri colleghi. Mentre tu usi e rifai il codice rubato di qualcun altro (forse anche quello di qualcun altro qui). In generale, non è una buona idea iniziare le attività qui.

 
Vasiliy Pushkaryov:
I colori sono definiti in Defines, poi gli oggetti sono colorati usando le funzioni ObjectSetInteger(). Al momento sto anche dipingendo direttamente con questo metodo. Ma mi piacerebbe provarlo attraverso OOP. Come vedo, se non c'è un metodo pubblico separato da modificare, non c'è modo di arrivare al membro privato. Non sono così esperto di ereditarietà e metodi virtuali, sto ancora "nuotando" e studiando l'argomento. Ok, proverò a chiedere al service-desk di fare un metodo pubblico per la colorazione, e se è possibile in un altro modo, forse mi diranno come.

Temporaneamente, copiate questa classe nella vostra Include\your_folder e mettete le variabili membro dellaclasse di cui avete bisogno per memorizzare i colori e i metodi pubblici per impostarli e restituirli.

Inoltre - sarete in grado di fare ciò di cui avete già bisogno. Minus - quando si aggiorna il SB nella classe originale, ci possono essere raffinamenti, e non li avete e dovete copiare e incollare di nuovo i metodi di cui avete bisogno nella classe aggiornata.

... Beh, è strano che non ci sia la possibilità di cambiare il colore tranquillamente - senza definire ...

 

Per favore aiutatemi - come posso ottenere rapidamente e informazioni sul volume (numero di lotti totali) di tutte le posizioni aperte su tutti gli strumenti? Si prega di condividere la funzione.

 
Aleksey Vyazmikin:

Per favore aiutatemi - come posso ottenere rapidamente e informazioni sul volume (numero di lotti totali) di tutte le posizioni aperte su tutti gli strumenti? Si prega di condividere la funzione.


Funzione GetAmountLotFromOpenPos().

Questa funzione restituisce la quantità di lotti delle posizioni aperte. Una selezione più accurata delle posizioni contate è specificata da parametri esterni:

  • sy- Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni del simbolo specificato. Il valore predefinito -"" significa qualsiasi strumento di mercato.NULL significa lo strumento corrente.
  • op- operazione commerciale, tipo di posizione. Valori validi:OP_BUY,OP_SELL o-1. Il valore predefinito-1 significa qualsiasi posizione.
  • mn- Identificatore di posizione, MagicNumber. Il valore predefinito-1 significa qualsiasi identificatore.

 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
Vladimir Zubov:

Grazie.

 

Si prega di consigliare la seguente domanda: Zig-zag per soglia (profondità (in punti, Alto (Basso) si formano dopo aver passato n punti, profondità=Profondità*Punto). C'è una catena di punti (ArrUp(ArrDn)) che mostra il disegno addizione dello zigzag, cioè l'ultimo punto era ArrUp, poi la profondità è scesa e si è formato il primo punto ArrDn, dopo di esso una serie di punti ArrDn, come il prezzo è andato giù (disegno addizione). Dobbiamo costruire l'algoritmo in modo tale che ci sia una rientranza di profondità. Forse un ciclo for, non riesco a capirlo.

//+------------------------------------------------------------------+
//|                                                       FastZZ.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yurich"
#property link      "https://login.mql5.com/ru/users/Yurich"
//---
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 DodgerBlue
#property indicator_width3 3
#property indicator_width4 3

//--- input parameters
extern int  Depth=10;
//---
double zzH[],zzL[];
double depth;
int last,direction,pbars;
datetime lastbar;
double ArrUp[];
double ArrDn[];
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,zzH);
   SetIndexBuffer(1,zzL);
   SetIndexBuffer(2,ArrUp);
   SetIndexBuffer(3,ArrDn);
   SetIndexStyle(0,DRAW_ZIGZAG);
   SetIndexStyle(1,DRAW_ZIGZAG);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(2,159);
   SetIndexArrow(3,159);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits);
//----
   depth=Depth*Point;
   direction=1;
   last=0;
   pbars=0;
   lastbar=0;
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
   int limit=Bars-IndicatorCounted()-1;
   if(lastbar!=Time[0])
     {
      lastbar=Time[0];
      last++;
     }
   if(MathAbs(Bars-pbars)>1) { last=Bars-1; limit=last;}
   pbars=Bars;
//---
   for(int i=limit; i>0; i--)
     {
      bool set=false;
      zzL[i]=0;
      zzH[i]=0;
      ArrUp[i]=EMPTY_VALUE;
      ArrDn[i]=EMPTY_VALUE;
      //---
      if(direction>0)
        {
         if(High[i]>zzH[last])
           {
            zzH[last]=0;
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            if(Low[i]<High[last]-depth)
              {
               if(Open[i]<Close[i])
                 {
                  zzH[last]=High[last];
                  ArrUp[last]=High[last];
                 }
               else direction=-1;
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
              }
            last=i;
            set=true;
           }
         if(Low[i]<zzH[last]-depth && (!set || Open[i]>Close[i]))
           {
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            if(High[i]>zzL[i]+depth && Open[i]<Close[i])
              {
               zzH[i]=High[i];
               ArrUp[i]=High[i];
              }
            else direction=-1;
            last=i;
           }
        }
      else //direction<0
        {
         if(Low[i]<zzL[last])
           {
            zzL[last]=0;
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            if(High[i]>Low[last]+depth)
              {
               if(Open[i]>Close[i])
                 {
                  zzL[last]=Low[last];
                  ArrDn[last]=Low[last];
                 }
               else direction=1;
               zzH[i]=High[i];
               ArrUp[i]=High[i];
              }
            last=i;
            set=true;
           }
         if(High[i]>zzL[last]+depth && (!set || Open[i]<Close[i]))
           {
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            if(Low[i]<zzH[i]-depth && Open[i]>Close[i])
              {
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
              }
            else direction=1;
            last=i;
           }
        }
     }
//----
   zzH[0]=0;
   zzL[0]=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Ciao a tutti.

Insegnami come fermare l'EA e iniziare quando appare una nuova candela.