[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 416

 
VladimirR:

Anche questa opzione non funziona



Mi chiedo cosa stai cercando. Ci sono altre opzioni per trovare l'area massima. Per esempio analitico
 
Vinin:

Mi chiedo perché i valori dei contatori debbano essere cambiati due volte nel ciclo. E per qualche motivo non c'è un'assegnazione (preliminare) di S2. Questo valore all'inizio è 0, e solo alla seconda iterazione (più precisamente alla terza) va a confrontare il valore reale (dipende da come contare da zero o da uno).
Non c'è assegnazione, perché l'enumerazione inizia con il valore minimo dell'area che è strettamente positivo, quindi 0 è abbastanza buono. Dove cambiano i valori dei contatori per la seconda volta?
 
Vinin:

Anch'io mi chiedo cosa stai cercando. Ci sono altre opzioni per trovare l'area massima. Come quello analitico.
Non è affatto il problema. È un compito semplice usato come esempio di come funziona l'operatore di pausa. Ho bisogno di sapere perché non si può scrivere for(int i=1, j=499; i<500; i++,j--) se non si impegnano le variabili i,j prima del ciclo per poter scrivere programmi corretti in seguito!
 
VladimirR:
Non è affatto questo il problema. Questo è un semplice compito usato come esempio di come funziona l'operatore di break. Ho bisogno di sapere perché non si può scrivere for(int i=1, j=499; i<500; i++,j--) se non si impegnano le variabili i,j prima del ciclo per poter scrivere i programmi giusti dopo!

Questo è probabilmente un bug nel compilatore.

Non si compila così:

for( int i=1, j=499; i<500; i++,j--) //последовательный перебор значений площади

E questo è il modo in cui si compila:

int i, j;
for( i=1, j=499; i<500; i++,j--) //последовательный перебор значений площади

E questo è il modo in cui si compila:

int i=1, j=499;
for( ; i<500; i++,j--) //последовательный перебор значений площади
 

Ciao a tutti!!!

Per favore, aiutatemi ad ottenere il numero di RiskReward dall'indicatore. Non riesco a inserirlo nel mio Expert Advisor.

 
demlin:

Ciao a tutti!!!

Per favore, aiutatemi ad ottenere il numero di RiskReward dall'indicatore. Non riesco a inserirlo nel mio Expert Advisor.


Dov'è il codice sorgente?
 

Gente, perché è così difficile rispondermi o semplicemente non volete? State sistemando una tale merda qui, ma siete troppo pigri per aiutare a scrivere una parte del codice. Proverò a chiedertelo ancora una volta, se non mi aiuti, andrò ai corsi, sono stanco di supplicarti qui.


Ancora una volta: dopo che l'EA è stato attaccato al grafico con il primo tick, fissa il prezzo Ask. Poi, durante il trading, non appena il prezzo aumenta, diciamo, del 10% (è chiaro che non può essere, è figurativo), l'EA dovrebbe notificare al trader il messaggio "Il prezzo è aumentato del 10%".

 
demlin:

Ciao a tutti!!!

Per favore, aiutatemi ad ottenere il numero di RiskReward dall'indicatore. Non riesco a inserirlo nel mio Expert Advisor.

Passa attraverso tutti gli oggetti del grafico, trova un oggetto chiamato lbl, tira fuori da esso la stringa FXRanger: Risk:Reward=x.xxx, analizzala e converti x.xxx in doppio.
 

Aiuta a risolvere il problema se gli ordini si aprono con SL, e se ci sono due ordini opposti, per il secondo rimuove SL.... ma questo non è necessario

Grazie

void Trailing()
{
//-----
  double Up = iCustom(NULL,0,"NLO",TrailPeriod,0,1);
  double Dn = iCustom(NULL,0,"NLO",TrailPeriod,1,1);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if(OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && Up > OrderOpenPrice()
      && OrderStopLoss() != Up && (OrderStopLoss() == 0 || Up > OrderStopLoss()))
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),Up,OrderTakeProfit(),0,CLR_NONE);
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && Dn < OrderOpenPrice()
      && OrderStopLoss() != Dn && (OrderStopLoss() == 0 || Dn < OrderStopLoss()))
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),Dn,OrderTakeProfit(),0,CLR_NONE);
      }
    }
  }
}
 

Salve. Ancora una volta non riesco a risolvere l'esempio del tutorial.

Compito 17. Ci sono 1.000 pecore nella prima fattoria. Ogni giorno il numero di pecore nella prima fattoria aumenta dell'1%. Il giorno in cui il numero di pecore nella prima fattoria raggiunge 50.000, il 10% delle pecore viene trasferito nella seconda fattoria. Quanto tempo ci vorrà perché il numero di pecore della seconda fattoria raggiunga le 35.000 unità? (Supponiamo che ci siano 30 giorni lavorativi nel mese).

//--------------------------------------------------------------------
// othersheep.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start()                               // Специальная ф-ия start()
  {
//--------------------------------------------------------------------
   int
   day,                                   // Текущий день месяца
   Mons;                                  // Искомое количест. месяцев
   double
   One_Farm    =1000.0,                   // Количество на 1 ферме
   Perc_day    =1,                        // Ежедневный подъём, %
   One_Farm_max=50000.0,                  // Пороговое значение
   Perc_exit   =10,                       // Разовый вывод, %
   Purpose     =35000.0,                  // Необх. колич. на 2 ферме
   Two_Farm;                              // Количество на 2 ферме
//--------------------------------------------------------------------
   while(Two_Farm < Purpose)              // До достижения цели
     {                                    // Начало тела внешн. цикла
      //--------------------------------------------------------------
      for(day=1; day<=30 && Two_Farm < Purpose; day++)// Цикл по дням 
        {
         One_Farm=One_Farm*(1+Perc_day/100);//Накопл. на 1 ферме
         if (One_Farm < One_Farm_max)     // Если меньше допустимого,.
            continue;                     // .. то овец не переводим
         Two_Farm=Two_Farm+One_Farm*Perc_exit/100;//Накопл. на 2 ферме
         One_Farm=One_Farm*(1-Perc_exit/100);     //Остаток на 1 ферме
        }
      //--------------------------------------------------------------
      if (Two_Farm>=Purpose)              // Если цель достигнута,..
         continue;                        // .. то месяцы не считаем
      Mons++;                             // Считаем месяцы
     }                                    // Конец тела внешнего цикла
//--------------------------------------------------------------------
   Alert("Цель будет достигнута через ",Mons," мес. и ",day," дн.");
   return;                                // Выход из функции start()
  }
//-------------------------------------------------------------------

In questo esempio, l'uscita dal ciclo

 for(day=1; day<=30 && Two_Farm < Purpose; day++)// Цикл по дням 

Il "giorno in più" viene sempre aggiunto, cioè viene aggiunto un giorno per il quale non viene eseguito alcun calcolo, ma poiché il ciclo è annidato, il "giorno in più" rimane.

ogni volta che il controllo vi ritorna, i giorni vengono ricontati di nuovo, quindi non è essenziale. Ma quando si esce dal ciclo

while(Two_Farm < Purpose)              // До достижения цели

il "giorno in più" rimane. E come risultato verrà stampata la risposta sbagliata.

Potete dirmi se il mio ragionamento è corretto o ho sbagliato qualcosa?