Caratteristiche utili da KimIV - pagina 121

 

C'è un errore nella funzione https://forum.mql4.com/ru/38949/page5#434241.

Dovrebbe essere così

double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, oop=0, p;
  int    i, k=OrdersTotal(), pp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              oop=OrderOpenPrice();
              if(pp==0) break;
            }
          }
        }
      }
    }
  }
  return(oop); 

}

Si prega di riscaricare.

 

Buon pomeriggio a tutti!

Nel sistemare gli Expert Advisors (a causa degli aggiornamenti di MQL) si è scoperto che molte delle funzioni di Igor Kim non funzionano più. Questo include i più popolari. Per esempio,

NumberOfPositions - Restituisce il numero di posizioni.

ExistPositions - Restituisce il flag di esistenza delle posizioni.

Un'altra funzione che ho menzionato ieri nel thread: Funzione NumberOfBarCloseLastPos().
Questa funzione restituisce il numero di barre per chiudere l'ultima posizione

Quando visualizzo il commento sul grafico di Strategy Tester, vedo che le funzioni restituiscono sempre valori costanti (-1 e/o 0), nonostante l'esistenza di trade (attuali e chiusi). È come se l'EA non vedesse le condizioni definite da queste funzioni nel suo codice.

Inoltre, le cosiddette funzioni "eseguibili" smettono di funzionare, ad esempio un insieme di funzioni per la chiusura delle posizioni: ClosePosBySelect (questa funzione chiude una posizione selezionata in precedenza) e funzioni associate:
ClosePositions - Chiudi le posizioni al prezzo di mercato, ecc.

Si prega di consigliare che tipo di bug ci sono in queste funzioni e cosa deve essere risolto, almeno usando una di esse -NumberOfPositions - restituisce il numero di posizioni?

 
Rita:

Buon pomeriggio a tutti!

Nel sistemare gli Expert Advisors (a causa degli aggiornamenti di MQL) si è scoperto che molte delle funzioni di Igor Kim non funzionano più. Questo include i più popolari. Per esempio,

NumberOfPositions - Restituisce il numero di posizioni.

ExistPositions - Restituisce il flag di esistenza delle posizioni.

Un'altra funzione che ho menzionato ieri nel ramo: Funzione NumberOfBarCloseLastPos().
Questa funzione restituisce il numero di barre per chiudere l'ultima posizione.

Quando visualizzo il commento sul grafico di Strategy Tester, vedo che le funzioni restituiscono sempre valori costanti (-1 e/o 0), nonostante l'esistenza di trade (attuali e chiusi). Sembra che l'EA non veda le condizioni definite da queste funzioni nel suo codice.

Inoltre, le cosiddette funzioni "eseguibili" smettono di funzionare, per esempio, un insieme di funzioni per la chiusura delle posizioni: ClosePosBySelect (chiude una posizione selezionata in precedenza) e
ClosePositions - Chiudi le posizioni al prezzo di mercato, ecc.

Si prega di consigliare che tipo di difetti sono apparsi nelle funzioni e cosa deve essere sistemato, almeno usando una di esse come esempio -NumberOfPositions - Restituisce il numero di posizioni?

NumberOfPositions() funziona bene per me! Davvero, continuo a lavorare con MQL4 senza plus! Se stai scrivendo in una lingua aggiornata, allora credo che tutto debba essere adattato ad essa o andare in Freelance! Tutto è commercializzato con una forza terribile ora! Il mio cuore è con te!

Se potete in qualche modo inserireNumberOfPositions(), allora ExistPositions() non è necessario! Potete controllare in questo modo:

if(NumberOfPositions() > 0) //вместо if(ExistPositions() == true)
----------------------------//или
if(NumberOfPositions() == 0)//вместо if(ExistPositions() == false)

Buona fortuna!

 
borilunad:

NumberOfPositions() funziona bene per me! Vero, continuo a lavorare con MQL4 senza plus! Se stai scrivendo in una lingua aggiornata, allora probabilmente tutto dovrebbe essere adattato ad essa o andare in Freelance! Tutto viene commercializzato con una forza terribile ora! !

Non vengo qui spesso, quindi non so, cosa significa "MQL4 senza professionisti"?

Pensate che quelli che possono rispondere qui non lo facciano per costringere un visitatore a pagare per rispondere a una semplice domanda da freelance?

Mi chiedo quanto costerebbe ai programmatori-commercianti locali sistemare tale funzione di I.Kim per farla funzionare nell'ultima versione di mt4 con MQL aggiornato:

//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  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) kp++;
          }}}}}
  return(kp);
}
Vi ricordo che Comment( NumberOfPositions(NULL, -1, Magic) ); - restituisce costantemente -1 anche se l'EA ha aperto delle posizioni.
 
Rita:

Non vengo qui spesso, quindi non so, cosa significa "MQL4 senza professionisti"?

Pensate che quelli che possono rispondere qui non lo facciano per costringere un visitatore a pagare per rispondere a una semplice domanda da freelance?

Mi chiedo quanto costerebbe ai programmatori-commercianti locali sistemare tale funzione di I.Kim per farla funzionare nell'ultima versione di mt4 con MQL aggiornato:

Vi ricordo che Comment( NumberOfPositions(NULL, -1, Magic) ); restituirà sempre -1, anche se l'EA ha aperto delle posizioni.

NULL come parametro di una funzione significa nessun parametro.

Sarebbe meglio)Comment( NumberOfPositions(Symbol(), -1, Magic));

 
Rita:

Non vengo qui spesso, quindi non so, cosa significa "MQL4 senza professionisti"?

Pensate che quelli che possono rispondere qui non lo facciano per costringere un visitatore a pagare per rispondere a una semplice domanda da freelance?

Mi chiedo quale sarebbe il costo di fissare una tale caratteristica per un programmatore commerciale:

Vi ricordo che l'output di Comment( NumberOfPositions(NULL, -1, Magic) ); mostra che viene sempre restituito -1, anche se l'EA ha aperto delle posizioni.

MQL4++ aggiornato, come lo chiamano qui!

La mia funzione restituisce il numero corretto di posizioni! Ma hai un errore in Comment()! Sono sicuro che la funzione funziona!

Prova così:

int start()// или что у Вас там, как в обновлённом MQL4


  int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic); //это вызов этой функции, чтобы знать, сколько у Вас баев
  int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);//а это для селлов



  Comment("Buy ",BuyPos," Sell ",SellPos);

In questo modo vedrete tutto esattamente sul grafico, applicate le variabili BuyPos e SellPos per controllare le condizioni! Vedi come ce l'ho io:

      if(BuyPos == 0 && SellPos == 0) 
      {
// и так далее ...

Buona fortuna!

 

Grazie, borilunad e vadynik, per il suggerimento!

Infatti, la funzione funziona! Ecco un umile ringraziamento per l'utile consiglio:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

 
borilunad:

Tutto viene commercializzato con una forza terribile ora! Il mio cuore è con te!

Boris, non ti vergogni a dirlo? Conta quante pagine hai scritto cercando di aiutarti. E questa è la tua gratitudine verso tutti coloro che ti hanno aiutato? Non li ricordo tutti, ma Artem (artmedia70) si è gentilmente occupato del tuo problema e ha ottenuto in cambio...
 
Rita:

Ecco un'alternativa. La funzione viene chiamata solo se il numero di ordini è cambiato. Inoltre può essere chiamato se il tipo di ordine è cambiato.

// переменные глобального уровня
int Total[6];
int ot;

void OnTick()
{
 if(ot != OrdersTotal())
  CountTrades();

  Comment("Ордеров BUY ", Total[OP_BUY], "\n"
        , "Ордеров SELL ", Total[OP_SELL], "\n"
        , "Ордеров BUYLIMIT ", Total[OP_BUYLIMIT], "\n"
        , "Ордеров SELLLIMIT ", Total[OP_SELLLIMIT], "\n"
        , "Ордеров BUYSTOP ", Total[OP_BUYSTOP], "\n"
        , "Ордеров SELLSTOP ", Total[OP_SELLSTOP], "\n"
}
void CountTrades()
{/*********************Подсчёт открытых ордеров**********************/
  ArrayInitialize(Total, 0);
           int type, total = OrdersTotal(); ot = 0;
            for(int i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                type = OrderType();
                 Total[type] += 1;
                ot++;
               }
             }
}/*******************************************************************/
 
Rita:

Grazie, borilunad e vadynik, per il suggerimento!

Infatti, la funzione funziona! Ecco un umile ringraziamento per l'utile consiglio:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

Grazie! Ma la prossima funzione suggerita potrebbe essere glitchata, dato che è scritta in MQL4++!
Motivazione: