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

 
BeerGod:

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page4#434230

La funzione isCloseLastPosByTake().

Questa funzione restituisce una bandiera per chiudere l'ultima posizione con Take Profit. La bandiera è su - Vero - TakeProfit è scattato. Flag abbassato - Falso - la posizione è stata chiusa per un altro motivo. Una selezione più accurata delle posizioni da considerare è specificata utilizzando parametri esterni:

  • sy - Nome dello strumento di mercato. Se impostate questo parametro, la funzione considererà solo le posizioni dello strumento 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.




Grazie, mi sono imbattuto anch'io nelle biblioteche di KIM...(il compagno Kim apparentemente come MARX del mondo del forex - ha scritto CAPITAL...e tutti noi lo citiamo ora (cioè lo inseriamo nei nostri EA)) .... ci sono "bandiere" di scambi recenti in diverse varianti...

tranne che non ho mai usato # includ-....

puoi spiegarmi in poche parole?

in cima scrivo # includ (nome del file mqh)

Ma nel codice, dove devo mettere la funzione?

GetTypeLastClosePos ();

e poi cosa?

COSA di questo mi restituirà il tipo di posizione?

int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}

OrderType() ?

cioè allora se(OrderType() ==TRUE ) fa questo e quello... giusto?

 
In che modo le funzioni del tester sono diverse da quelle del trading online?
 
In teoria, la gestione degli errori nella comunicazione con il server commerciale.
 
lottamer:


Grazie, io stesso mi sono imbattuto nelle biblioteche di KIM ... (il compagno KIM probabilmente ha scritto CAPITAL come MARCHE del mondo Forex ... e tutti noi lo citiamo ora (cioè, inserirlo nei nostri Expert Advisors) ...) ci sono "bandiere" di scambi recenti in diverse varianti...

tranne che non ho mai usato # include-....

puoi spiegarmi in poche parole?

in cima scrivo # include (nome del file mqh)

Ma nel codice, dove devo mettere la funzione?

GetTypeLastClosePos ();

e poi cosa?

COSA di questo mi restituirà il tipo di posizione?

OrderType() ?

cioè allora se(OrderType() ==TRUE ) fa questo e quello... giusto?

Le funzioni dovrebbero essere inserite dopo return(0);

La funzione GetTypeLastClosePos() restituirà 0 se c'è stato un acquisto, e 1 se c'è stata una vendita, o -1 se non c'è nulla nella storia.

//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if (isCloseLastPosByTake()==true) Comment("Профит"); else Comment("ХЗ");   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 
BeerGod:

La funzione deve essere inserita dopo return(0);

La funzione GetTypeLastClosePos() restituirà 0 se c'è stato un acquisto e 1 se c'è stata una vendita, o -1 se non c'è nulla nella storia.



Capito, grazie.

E ancora, se la funzione è in un file #include, allora come dovrebbe essere gestita?

 
lottamer:


Capito, grazie.

e ancora, se la funzione è in un file #include, allora come la eliminate?


come si capisce #include?

Come nel documento o a modo tuo?

 

Ho bisogno che il gufo metta un ordine pendente esattamente all'apertura di una candela su D1.

Ho scritto una funzione:

bool GetTimeToInput()
{
  if(TimeCurrent() == iTime(Symbol(),1440,0)
  {
    return(true);
  }
  else
    return(false);
}

Il compilatore si acciglia:

'\end_of_program' - unbalanced left parenthesis E:\Insall'd soft's\Forex\Alpari NZ MT4\experts\Gann_2Days.mq4 (228, 4)

Tutti hanno delle parentesi e questo è strano. Se questa funzione è commentata, il codice si compila senza errori. Cosa può esserci di sbagliato?

Sono corretto nello scrivere la funzione per aprire solo al prezzo di apertura di una candela giornaliera?

 

hoz:

Le parentesi di tutti sono lì, è strano.

No. Manca il cane giusto nella linea if


e forse non dire la parola "strano" quando si tratta del compilatore. Certo, è difficile vedere la trave nel proprio occhio :)

E ho effettivamente scritto la funzione corretta per aprire solo al prezzo di apertura della candela del giorno?

no
 
lottamer:


Gli sviluppatori non hanno niente a che fare con questo. :__

Invece di ( Hour()>=10 || Hour()<20 ) avresti dovuto renderlo semplice Hour()>=10 && Hour()<20

e tutto ha funzionato


La questione non è che ha funzionato, ma che se l'aiuto è scritto correttamente, non dovrebbe funzionare.
 
sergeev:

come si capisce #include?

come nel Doka o a modo suo?


come nel Doka.

c'è un file.

C'è un riferimento ad esso nell'EA.

Questo è sufficiente per utilizzare in qualsiasi luogo dell'EA, per esempio, nel modo seguente

se isCloseLastPosByTake()<0... ?