Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 410

 
rosomah:

Potete dirmi se usando la Libreria Standard, quando si ottengono Ask e Bid, è necessario fare mysymbol.RefreshRates();

cioè aggiornare o per i dati della Biblioteca non è necessario aggiornare?

o

se hai bisogno di prezzi correnti, non devi fare nulla

se((Bid-Xprice)/Point>=Step)

 

Non capisco una cosa) Ho lavorato su questo codice per 3 ore. è una funzione per una griglia. è chiamata all'apertura di un nuovo ordine nella griglia, il suo scopo è di ricalcolare il TP e cambiarlo per tutti gli ordini nella griglia

Ma cambia solo il TP dell'ordine più vecchio nella griglia.

Cosa sto confondendo?))

void ModifyOrders()
  {
   double avg= 0;
   int count = 0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OP_SELL)
              {
               avg+=OrderOpenPrice();
               count++;
              }
           }
        }
     }
   int Tcount=count-1;        // Print("204");
   avg=(Tcount*Step*0.4);
//     avg=NormalizeDouble(avg/count,Digits);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               double Bprice=FindLastBuyPrice();//Print("215");
               TP=NormalizeDouble(Bprice+avg*Point,Digits); //Print("216");
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Blue);// Print("217");
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }

            if(OrderType()==OP_SELL)
              {
               double Sprice=FindLastSellPrice();
               TP=NormalizeDouble(Sprice-avg*Point,Digits);
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Red);
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }
           }
        }
     }

  }
 
Leanid Aladzyeu:

Non capisco una cosa) Ho lavorato su questo codice per 3 ore. è una funzione per una griglia. è chiamata all'apertura di un nuovo ordine nella griglia, il suo scopo è di ricalcolare il TP e cambiarlo per tutti gli ordini nella griglia

Ma cambia solo il TP dell'ordine più vecchio nella griglia.

Cosa sto confondendo?))

Quando hai intenzione di cambiare il browser? Proprio come un bambino.
 
Karputov Vladimir:
Quando cambierai il tuo browser? Proprio come un bambino.

È un problema del sito che non hanno adattato il sito al mio browser. Service Desk come al solito, 0 aiuto. Sto bene con il mio browser.

 
Leanid Aladzyeu:

È un problema del sito che non hanno adattato il sito al mio browser. Service Desk come al solito, 0 aiuto. Sto bene con il mio browser.

Puoi sempre usare Internet Explorer per incollare il codice - incollerà esattamente il codice. Pensa alle persone intorno a te - è imbarazzante leggere il codice mentre lo incolli.
 

Puoi dirmi il codice per MT4. Se è arrivata una nuova barra, allora ridisegna l'indicatore del grafico.

Penso di aver trovato il codice e di averlo messo per iniziare

if(IsNewBar())
   {
    Print("Новый бар");
    RefreshRates();
    WindowRedraw();

   }

// функция за кодом

 bool IsNewBar()

{

   static datetime BARflag = 0;

   datetime now = Time[0];

   if(BARflag < now)

   {

      BARflag = now;         

      return(1);

   }

   

   else

   {

      return(0);

   }

}


La stampa esce ma il grafico non lo ridisegna =(

 
twiling1983:

Puoi dirmi il codice per MT4. Se è arrivata una nuova barra, allora ridisegna l'indicatore del grafico.

Penso di aver trovato il codice e di averlo messo per iniziare


La stampa esce ma il grafico non lo ridisegna =(

Probabilmente perché RefreshRates e WindowRedraw non hanno effetto sugli indicatori. È necessario scavare gli indicatori.
 

Come determinare cosa stiamo comprando sul grafico attuale e per cosa (russo storto, scusate). Per esempio, sul grafico EURUSD, la valuta di base (ciò che stiamo comprando) è EUR e la valuta quotata (ciò per cui stiamo comprando) è USD. Possono essere identificati:

string first = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_BASE);
string second = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT);

E l'oro, per esempio? Su un grafico GOLD entrambi i valori saranno USD. E ho bisogno di determinare che stiamo comprando oro per USD. Analizzare la stringa del nome del simbolo non è appropriato.

 
Alexey Viktorov:
Probabilmente, perché RefreshRates e WindowRedraw non hanno effetto sugli indicatori. Bisogna scavare negli indicatori.

Beh, se si preme il pulsante di aggiornamento nel terminale, tutto viene ricalcolato.

come si fa a premere lo stesso pulsante nel codice? =)

Ecco come la vedo io.

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);

 

Ha iniziato a studiare gli array.

Ho scritto una funzione pro-ordine con array, 3 array = 0 acquisto, 1= vendita, 2= totale delle compravendite.

Poi ho scritto una condizione per comprare se ( la prima condizione && array [0] == 0 )allora apriamo un acquisto

e in vendita se ( la prima condizione && array [1]== 0) allora apriamo una posizione Sell.

Ma il tester lancia un errore e il test si ferma, qual è il problema? ( errore " uscita di matrice " )