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

 
gyfto:

Ho una domanda infantile. Le variabili sono dichiarate nell'intestazione del codice. Si suppone che siano globali. Ma non capisco la differenza

da

se questa variabile è dichiarata nell'intestazione. Idealmente, per ambito della variabile. Ma in entrambi i casi è visibile all'interno della funzione. Ho fatto un test (script):

- Non ho notato alcuna differenza. Puoi spiegare la loro differenza, perché non la capisco.

C'è uno statik in più. Funzionerà anche senza. Ha senso dichiarare la statica all'interno delle funzioni. L'ambito del solo blocco funzione.
 
Zhunko:
Ha senso dichiarare la statica all'interno delle funzioni. L'ambito è solo un blocco di funzioni.


Funziona allo stesso modo:

int a = 10;
int start(){
   Alert(StringConcatenate("st: a = ", a));//st: a = 10
   f1(); Alert(StringConcatenate("f1: a = ", a));//f1: a = 10
   f2(); Alert(StringConcatenate("f2: a = ", a));//f2: a = 10
}
void f1(){
   int a = 11;
   return;
}
void f2(){
   static int a = 12;
   return;
}

In quale caso si sentirà la differenza? ALXIMIKS, grazie anche per la risposta.

 

Ciao!

Potete dirmi come installare un indicatore/robot aggiuntivo su un mt4 installato su un iphone/ipad? In linea di principio, è possibile? Con Windows è elementarmente semplice, ma con i prodotti mobili Apple non è così ovvio.

La logica dice che è possibile. Dopo tutto, un certo numero di indicatori sono già preinstallati. Ma cosa e dove copiare non è chiaro, la struttura dei file è diversa. Qualcuno non ha incontrato un tale problema?

Grazie in anticipo.

 

Sto facendo un indicatore basato sulle medie mobili . L'idea è quella di tagliare i movimenti insignificanti all'interno di punti specifici. Diciamo che abbiamo impostato un filtro di 50 pip. L'indicatore sta diminuendo ma la diminuzione è inferiore a 50 pips, quindi prendiamo il valore di ieri della media e lo scriviamo e fissiamo il suo livello per la data corrente. Sulla prossima barra controlliamo la differenza, il valore attuale meno il valore che abbiamo registrato, se il totale non supera i 50 pip, impostiamo il livello che è memorizzato nella variabile statica al valore attuale. Se il valore lo supera, il valore diventa il valore attuale, cioè simile a una media mobile con uno spostamento di zero.Ho provato diverse varianti, ma finora non ho trovato la soluzione giusta.

Per semplicità vi allego il codice per disegnare solo le diminuzioni. Il problema è che l'indicatore disegna in aumento. E il principale è che quando lo faccio funzionare nel tester posso vedere visivamente l'indicatore che cambia, mentre non c'è nessuna uscita fuori dal filtro. Suppongo che da qualche parte il valore del valore registrato "MA_otshet" sia perso.

#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red 
//--- input parameters
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit;
    double
    raznica,raznica_static,MA_0_t,MA_1_t;
   static double MA_otshet;  //здесь хранится запись значения MA_otshet
   
   for(int i=0;i<Bars;i++)
   {  
      MA_0_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+0);  
      MA_1_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+1); 
      raznica=MA_0_t-MA_1_t; //разница между сегодня и вчера по скользящей средней
      raznica_static=MA_0_t-MA_otshet; //разница между сегодня и MA_otshet

      if(raznica > -0.005 && raznica <= 0) // если raznica не превышает заданное число 
          {
          MA_otshet=MA_1_t; // записываем значение MA_otshet
          }
      if(raznica_static > - 0.005 && raznica_static <= 0) //если raznica_static не превышает заданное число
          {
          ExtMapBuffer1[i]=MA_otshet;  // то рисуем значение индикатора, как записанный MA_otshet
          }
      if(raznica_static < - 0.005) // если raznica превышает заданное число
          {
          ExtMapBuffer1[i]=MA_0_t; // то рисуем значение по текущей цене
          }
   } 
   return(0);
  }
//+------------------------------------------------------------------+
 

Buon pomeriggio, per favore aiutatemi.

Ho bisogno che tutti gli ordini siano chiusi alle 23 55 e il venerdì il trading finisce alle 22 00, quindi c'è un problema con il trade

ho trovato nello script tutorial nella sezione tempo aiuto si prega di aggiungere il parametro numero del giorno, cioè Venerdì gli ordini sono stati chiusi alle 21 55 e nei giorni normali alle 23 55 o può condividere il link se ci sono soluzioni pronte

//--------------------------------------------------------------------
// timeevents.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
extern double Time_Cls=16.10;          // Время закрытия ордеров
bool Flag_Time=false;                  // Флаг, сообщения ещё не было 
//--------------------------------------------------------------- 2 --
int start()                            // Спец. функция start
  {
   int    Cur_Hour=Hour();             // Серверное время в часах
   double Cur_Min =Minute();           // Серверное время в минутах
   double Cur_time=Cur_Hour + Cur_Min100; // Текущее время
   Alert(Cur_time);
   if (Cur_time>=Time_Cls)             // Если наступило время события
      Executor();                      //.. то выполняем задуманное
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 3 --
int Executor()                         // Пользовательская функция
  {
   if (Flag_Time==false)               // Если ещё не было сообщения..
     {                                 // .. то сообщаем (1 раз)
      Alert("Время важных новостей. Закройте ордера.");
      Flag_Time=true;                  // Теперь сообщение уже было
     }
   return;                             // Выход из польз. функции
  }

//--------------------------------------------------------------- 4 --

 
r772ra:
Facile!!!


Grazie. Ma hai un'idea. Ho bisogno solo di 1 giorno di informazioni. Questo è per visualizzare le informazioni sui profitti dell'ultimo giorno lavorativo

Le variabili sono dichiarate. Non funziona. Sono tutti zeri.

for (p=0; p<OrdersHistoryTotal(); p++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))<OrderCloseTime() && (OrderType()==OP_BUY || OrderType()==OP_SELL) )

p0+=OrderProfit()+OrderCommission()+OrderSwap();

}

}

double r0=p0*100/AccountBalance();

 
Zolotai:


Grazie. Ehi, puoi darmi un suggerimento? Ho bisogno solo di 1 giorno. Cioè, per visualizzare le informazioni sui profitti dell'ultimo giorno lavorativo

Le variabili sono dichiarate. Non funziona. È tutto nullo.

for (p=0; p<OrdersHistoryTotal(); p++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))<OrderCloseTime() && (OrderType()==OP_BUY || OrderType()==OP_SELL) )

p0+=OrderProfit()+OrderCommission()+OrderSwap();

}

}

double r0=p0*100/AccountBalance();


Questo Expert Advisor ha la libreria MM_Light e la funzione al suo interno:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Считаем итоги работы по своим ордерам                                      |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fCalculate_Pribul (int fi_OP = -2,              // тип (BUY\SELL) учитываемых ордеров
                          datetime fdt_TimeBegin = 0,  // момент времени, с которого производим расчёт
                          string fs_Comment = "")      // комментарий ордеров
{
    double   ld_Pribul = 0.0;
    int      history_total = OrdersHistoryTotal();
//----
    for (int li_ORD = 0; li_ORD < history_total; li_ORD++)
    {
        if (!fCheck_MyOrders (li_ORD, fi_OP, MODE_HISTORY)) continue;
        if (fdt_TimeBegin > OrderCloseTime()) continue;
        if (fs_Comment != "") {if (StringFind (OrderComment(), fs_Comment) < 0) continue;}
        ld_Pribul += (OrderProfit() + OrderSwap() + OrderCommission());
    }
//----
    return (ld_Pribul);
}
Il principio non è difficile da capire. Per calcolare il profitto/perdita per il giorno corrente, dovete passargli il valore: fCalculate_Pribul (-2, iTime (Symbol(), PERIOD_D1, 0), "").
 
sannin:

Buon pomeriggio, per favore aiutatemi.

Ho bisogno che tutti gli ordini siano chiusi alle 23 55 e il venerdì il trading finisce alle 22 00, quindi c'è un problema con il trade

ho trovato nello script tutorial nella sezione tempo aiuto si prega di aggiungere il parametro numero del giorno, cioè Venerdì gli ordini sono stati chiusi alle 21 55 e nei giorni normali alle 23 55 o può condividere il link se ci sono soluzioni pronte

//--------------------------------------------------------------- 4 --

Certo, il codice è stato scritto da zero, ma dovrebbe funzionare, almeno si dovrebbe capire

int start() {
switch(DayOfWeek()){// если пятница,суббота, и т.д.
 case 4://пятница
 case 5://суббота на всякий случай
 case 6://воскресенье на всякий случай
             if((Hour()==22 && Minute()>=00) || Hour()>22){
                 //   Выполняем какое то действие  в пятницу после 22:00
             }
             break;
 case 0://понедельник
 case 1://вторник
 case 2://среда
 case 3://четверг
             if(Hour()>23 || (Hour()==23 && Minute()>55)){
                // все остальные действия в нормальные рабочии дни ПОСЛЕ 23:55
             }
              break;
  default:   {//все остальные действия в нормальные рабочии дни до 23:55
  
             }
 }                   
}
 
SetIndexStyle(1,DRAW_LINE,STYLE_DASH,0);
Dove si specifica lo spessore della linea in questa parte? Ero persino imbarazzato. :(
 
Link_x:
Dove si specifica lo spessore della linea in questa parte? Ero persino imbarazzato. :(
L'ultimo parametro.