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

 
Vitaly Muzichenko #:

Non so da dove cominciare.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  int H=100;
  double b, a;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }

  b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  else if (rates_total == prev_calculated) { // сдвигаем данные только когда количество баров не поменялось (в случае появления нового бара они сдвигаются системой терминала)
    ArrayCopy(Buffer1, Buffer1, 1, 0, H);
    ArrayCopy(Buffer2, Buffer2, 1, 0, H);
  }
  // записываем новые данные
  Buffer1[0]=b;
  Buffer2[0]=a;
  return(rates_total);
}

Dovrebbe funzionare. Guarda qui.

P.S. E per favore scrivi quanto cambia la variante di velocità con la funzione ArrayCopy. Vorrei saperlo io stesso.

 
Vitaly Muzichenko #:

Non so da dove cominciare

Ecco una variante di mql5. Ma solo per il prezzo Ask. Per il prezzo di Bid dovete farvelo da soli.

Ha tutto, e il lavoro con il buffer degli indicatori, e il lavoro con i tick, e l'esempio di come non sia necessario invertire l'indicizzazione del buffer degli indicatori.

A 1000 barre viene visualizzato senza alcun ritardo.

File:
 
Alexey Viktorov #:

Ecco una variante di mql5. Ma solo per il prezzo Ask. Per il prezzo dell'offerta finalizzalo da solo.

Ha tutto, compreso il lavoro con il buffer degli indicatori, e il lavoro con i tick, e l'esempio di come l'indicizzazione del buffer degli indicatori non deve essere invertita.

A 1000 barre viene visualizzato senza alcun ritardo.

Capito! Grazie!

 

Ciao, ho recentemente iniziato a lavorare con MT4 e mi sono imbattuto nel seguente problema: non esiste una funzione adeguata per tracciare un ordine chiuso. Il mio algoritmo è semplice: quando appare una nuova candela, piazzo due ordini pendenti: un Sell Stop e un Bid Stop e devo seguire l'ordine chiuso (Sell Stop o Bid Stop) quando uno di essi si chiude e piazzare un ordine al posto di quello chiuso. Gli ordini sono piazzati - nessun problema con questo, ma non riesco a capire come tracciare quelli chiusi, ho messo il codice, ma il messaggio visualizza solo SellSTOP, e non reagisce a BAYSTOP:


if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY))
   {
   Print("OrderType", OrderType());//Тут всегда только только "1"
   }
   if(OrderType()==0)
    {
    Print("Закрылся  BUYSTOP:", OrderTicket());
    }
   if(OrderType()==1)
   {Print("Закрылся   SELLSTOP:",  OrderTicket());} //Тут сообщает корректно - номер ордера

E mi sono anche imbattuto nel fatto che OnTrade oOnTradeTransaction non funziona, ho provato questo:

void OnTradeTransaction()
 {
 Print("status - "); 
 }  
 
MixanM #:

Ciao, ho recentemente iniziato a lavorare con MT4 e mi sono imbattuto nel seguente problema: non esiste una funzione adeguata per tracciare un ordine chiuso. Il mio algoritmo è semplice: quando appare una nuova candela, piazzo due ordini pendenti: un Sell Stop e un Bid Stop e devo seguire l'ordine chiuso (Sell Stop o Bid Stop) quando uno di essi si chiude e piazzare un ordine al posto di quello chiuso. Gli ordini sono inseriti - nessun problema, ma non riesco a capire come tracciare quelli chiusi, ho messo il codice, ma il messaggio visualizza solo SellSTOP, BAYSTOP non risponde:

//+----------------------------------------------------------------------------+
int LastClose()
  {
   int result=-1;
   datetime t=0;
   int i=OrdersHistoryTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY||OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  t=OrderCloseTime(); result=OrderType();
                 }
              }
           }
        }
     }
   return(result);
  }
//+----------------------------------------------------------------------------+

MixanM OnTradeTransaction non funziona, ho provato questo:

Sembra essere per MT5
 
Ciao a tutti, amici.
Ecco una domanda.
Lacopia delle offerte su questo servizio non è cambiata in tanti anni. L'impressione è stata a lungo che gli sviluppatori non sono affatto interessati a pensare alla comodità dei suoi visitatori.
Ha preso la necessità del loro progetto.

Non so se è possibile?

1) Ho bisogno del copiatore di accordi, (consulente) non so quale sia il carico e come si misura, è necessario che sia in grado di copiare da uno e distribuire più di cento conti.
La domanda sulla copia. Il mio obiettivo è quello di ottenere un volume di trade basato sulle percentuali di deal (cioè io ho 100 sul mio conto; il mio follower ha 1000 sul suo conto; io apro un deal con il 3% del mio deposito e il volume del lotto viene ricalcolato in base alla percentuale del mio deal; cioè il mio deal con il 3% è 3$; il follower ha un deal aperto con il 3% = 30$; cioè non so se è davvero importante o no).


2) È possibile ritirare i dati del conto di un abbonato? Cioè nome, cognome ma soprattutto l'importo del saldo? Se non è possibile ritirare tutte le informazioni, cosa è possibile?

3) Cari programmatori, stimate il costo approssimativo di un tale lavoro, non voglio essere ingannato e voglio capire il prezzo adeguato.
Grazie!
 
Roman Voloshchuk copia delle transazioni su questo servizio non è cambiata in tanti anni. L'impressione è stata a lungo che gli sviluppatori non sono affatto interessati a pensare alla comodità dei suoi visitatori.
Ha preso la necessità del loro progetto.

Non so se è possibile?

1) Ho bisogno del copiatore di accordi, (consulente) non so quale sia il carico e come si misura, è necessario che sia in grado di copiare da uno e distribuire più di cento conti.
La domanda sulla copia. Il mio obiettivo è quello di ottenere un volume di scambi basato sulle percentuali di transazioni (cioè io ho 100 sul mio conto; il mio follower ha 1000 sul suo conto; io apro una transazione con il 3% del mio deposito e il volume del lotto viene ricalcolato in base alla percentuale della mia transazione; per questo motivo la mia transazione con il 3% è 3$ mentre il follower ha aperto una transazione con il 3% = 30$.


2) È possibile ritirare i dettagli del suo conto? Cioè nome, cognome ma soprattutto l'importo del saldo? Se non è possibile ritirare tutte le informazioni, cosa è possibile?

3) Cari programmatori, stimate il costo approssimativo di un tale lavoro, non voglio essere ingannato e voglio capire il prezzo adeguato.
Grazie!

I dati degli abbonati sono dannosi da togliere.

Di nuovo, tu hai 50 sul tuo conto con una leva di 500 e un sottoscrittore ha 5000 con una leva di 33.

Qui c'è un piccolo problema di calcolo. Questo se parliamo di questo servizio.

Se parliamo di auto-copiatura, allora:

hai 50 sul tuo conto con una leva di 2000 e un sottoscrittore 5000 con una leva di 33.

Tu potrai aprire 3 posizioni con una piccola leva mentre l'abbonato non avrà più soldi dopo la seconda, perché si esporrà al margine.

---

Non è così semplice.

 

Tretyakov Rostyslav #:
Это вроде для МТ5С

Grazie per il codice, ma anche il tuo restituisce solo ordini pari (SELLSTOP) per qualche motivo, non riesco a capire perché, forse l'ordinamento è sbagliato/ (sto eseguendo il codice nel tester - forse è questo il problema?)

 
MixanM #:

Grazie per il codice, ma anche il tuo restituisce solo ordini pari (SELLSTOP) per qualche motivo, non riesco a capire perché, forse l'ordinamento è sbagliato/ (sto eseguendo il codice nel tester - forse è questo il problema?)

il mio codice restituisce il tipo dell'ultimo ordine chiuso - "0-Compra" o "1-Vendi"
 
Tretyakov Rostyslav #:
il mio codice restituisce il tipo dell'ultimo ordine chiuso - "0-Compra" o "1-Vendi"

Beh, sì, è quello che intendevo - che restituisce solo dati per un ordine "sellstop". Ho aggiunto questo al tuo solo per controllare visivamente:

...

se(t<OrderCloseTime())

{

t=OrderCloseTime(); result=OrderType();

Print("Order TIP :", OrderTicket());

}

....