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

 
tara:
No.

Sarebbe più utile che tu rispondessi "dieci"! In caso contrario!
 
Got:

Spiega dove sbaglio, non trova lo strumento in Market Watch.

Prova anche a mettere "=" nella condizione i>=0

for(int i=SymbolsTotal(true)-1; i>=0; i--){
 
borilunad:

Clicca su Grafici, in fondo a Proprietà e in alto a sinistra deseleziona il Grafico in alto! E in generale, usatene di più, vi sarà utile!

Grazie, ha funzionato.
 

Il Debugger non funziona - cosa c'è che non va?

Metatrader bild 646, editor bild 934. Ecco l'indicatore più semplice:


L'ho eseguito su EURUSD, M1, e questo è ciò che ottengo:

1

Cioè tutto è come dovrebbe essere.

E ora faccio un breakpoint prima di Alert ed eseguo il Debugger:

Appare il graficoH1 di USDCHF. Da dove viene? Ho soloEURUSD , M1 aperto.

Lo sto eseguendo e questo è ciò che vedo:

Cioè, l'indicatore prende i dati esattamente da questo USDCHF,H1. Qual è il problema qui?

La seconda domanda: l'editor non mette lo script scritto nella cartella Scripts ma nella cartella MQL4 e ci mette anche il file compilato. Devo trascinare manualmente il codice sorgente nella cartella Scripts, poi compilarlo e lo script apparirà in Navigator solo allora. Non ho questo bug con gli indicatori, vanno nelle loro cartelle istantaneamente. È qualcosa che sto facendo male o è l'editor che fa un errore?

Terza domanda. Ho ancora 646 Bild, anche se qualcuno sul forum ha detto circa 650° a maggio. Davvero non c'è stato nessun aggiornamento da allora, o ho di nuovo qualcosa che non va?

Buona fortuna a chiunque mi risponda.

 
Grazie per la fortuna! Ma solo rispondendo alla terza domanda! Anch'io ho una bild 646 fino a quando il server non ci aggiornerà a una più recente. Questo succede quando lo accendo dopo un riposo. Lo faccio una volta alla settimana prima dell'inizio della sessione. Buona fortuna anche a voi!
 

Come posso mettere SendMail e Alert nell'indicatore in modo che non reagisca ai vecchi segnali quando ricalcola i valori dell'indicatore, ma mostri Alert e invii mail solo su quelli nuovi?

Se va così:

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
//////////////////

      string dir="";
      datetime tim=0;

int OnInit()
  {

   SetIndexStyle(0, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(0, 176);
   SetIndexBuffer(0, Up);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(1, 176);
   SetIndexBuffer(1, Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }

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 i,limit;
   double ma0,ma1,atr;
//---
      if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated; //period+shift;
   else
      limit=rates_total-(period+shift);

   for(i = 1; i < limit; i++)
  {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
            Up[i] = (Close[i]+Open[i])/2;
            dir="up";
            tim=Time[i];
            alerts(dir,tim);
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {   
            Down[i] = (Close[i]+Open[i])/2;
            dir="down";
            tim=Time[i];
            alerts(dir,tim);
        }
  }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d, datetime t)
{
if(!IsTesting() && (TimeLocal()-t)>60)
{
if(alert==true) Alert("New ",d," arrow");
if(mail==true) SendMail("New signal",StringConcatenate("A new ",d, "signal detected by indicator"));
if(not==true) SendNotification(StringConcatenate("A new ",d, "signal detected by indicator"));
}
return;
}

poi a qualsiasi effetto sull'indicatore (impostazione sul grafico, impostazione, cambiamento di TF, salto di posto o suono acuto), mostra nuovamente gli avvisi e cerca di inviare la stessa mail a TUTTE le frecce, dall'inizio del grafico a quello attuale.

Domanda in più - la posta nel log è segnata come"Mail: 'Test message' has been sent", ma non una sola lettera è caduta nella casella (((

 
evillive:

Come posso scrivere SendMail e Alert nell'indicatore, in modo che non reagisca ai vecchi segnali quando ricalcola i valori dell'indicatore, ma mostri Alert e invii mail solo su quelli nuovi?

Se va così:

poi a qualsiasi influenza sull'indicatore (installazione sul grafico, impostazione, cambiamento di TF, salto di posto o suono acuto), mostra di nuovo gli avvisi e cerca di inviarli per posta a TUTTE le frecce, dall'inizio del grafico a quello attuale.

Domanda in aggiunta - la posta nel log è segnata come"Mail: 'Test message' has been sent", ma non una sola lettera è caduta nella casella ((((.


L'avrei fatto

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
                     //////////////////

char dir=0;
datetime tim=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {

   SetIndexStyle(0,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(0,176);
   SetIndexBuffer(0,Up);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(1,176);
   SetIndexBuffer(1,Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 i,limit;
   double ma0,ma1,atr;
//---
   if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated-1; //period+shift;
   else
      limit=rates_total-(period+shift)-1;

   for(i=limit; i>=0; i--)
     {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
         Up[i]=(Close[i]+Open[i])/2;
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         Down[i]=(Close[i]+Open[i])/2;
        }
     }
      if(ma0>ma1 && Close[0]<Close[shift] && Close[0]>Close[period+shift])
        {
         if (dir!=1) {
            dir=1;
            alerts("UP",Time[0]);
         }
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         if (dir!=-1){
            dir=-1;
            alerts("DOWN",Time[0]);
         }
        }

   

   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d,datetime t)
  {
   if(!IsTesting() && (TimeLocal()-t)>60)
     {
      if(alert==true) Alert("New ",d," arrow");
      if(mail==true) SendMail("New signal",StringConcatenate("A new ",d,"signal detected by indicator"));
      if(not==true) SendNotification(StringConcatenate("A new ",d,"signal detected by indicator"));
     }
   return;
  }
//+------------------------------------------------------------------+
 
Vinin:


Lo farei

Le linee aggiunte dovrebbero essere al di fuori del ciclo o è un errore di battitura?
Ok, ho capito, è così che dovrebbe essere.
 

Ciao, qualcuno ha un modello per la mediazione di una posizione.

Cioè, se un ordine è aperto e sta perdendo, allora aprendo un secondo ordine nella stessa direzione, mettiamo uno stop in mezzo a questi ordini e così via, tre ordini, quattro...?

 
Top2n:

Ciao, qualcuno ha un modello per la mediazione di una posizione.

Cioè, se un ordine è aperto e sta perdendo, allora aprendo un secondo ordine nella stessa direzione, mettiamo uno stop in mezzo a questi ordini e così via, tre ordini, quattro...?


Prendi tutti i prezzi aperti e calcola la media aritmetica