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

 
Kot:

Buon pomeriggio!


Ho un EA che fa certi calcoli. Utilizza diverse operazioni matematiche, array, loop. Salva il risultato in un file. Deve ricominciare tutto dall'inizio dopo aver eseguito tutte le azioni. Ha fatto tutti i calcoli una volta e poi si blocca per la seconda volta senza fare alcuna azione. Potete consigliarmi se è necessario azzerare le variabili, cancellare gli array o qualcos'altro prima di iniziare un nuovo calcolo?

Hai provato a chiudere il file?

 
Buon pomeriggio! Ho bisogno di aiuto per un umanitario (io) che sta cercando di fare un indicatore con la più pallida conoscenza di come farlo))) ma avere una comprensione di ciò che dovrebbe apparire)) Allora:
Come programmare una stampella/indicatore/script (come un indicatore con schede "about, general, input parameters, colours, display") per MT4 in modo che prenda dati da file .csv, come il formato delfile sorgente:
EUR;TF;1.192;1.1733
EUR;TN;1.2037;1.1663
EUR;AB1;1.1906499615;1.1797479615
CHF;TF;1.0362;1.0183
CHF;TN;1.0479;1.0121
CHF;AB1;1.03484132734247;1.02549513556164


Cioè
l'indicatore ha preso i dati registrati da un file e li ha messicome un segmento di linea (TF, TA) o una banda colorata(EA) con i parametri dell'estensione uguale a "un giorno". (dal bordo al bordo dei separatori verticali dei giorni su МТ4), per le linee selezione del colore della linea, tipo di linea, selezione del colore del testo e dimensione del commento e sostituzione della linea di commento come "TF - 1,192" la seconda linea "TF - 1,1733" che sono prese dalle linee corrispondenti del file. L'intervallo è puramente orizzontale e dalla linea EUR;TF;1.192;1,1733 prende la prima cifra per uno slot e la seconda cifra per il secondo come inizio dello slot 1.192 e fine dello slot 1.192.
Ci sono anche intervalli, per esempio EA, il principio è lo stesso dall'inizio alla fine della giornata ma il prezzo è diverso e la linea inizia e finisce con CHF;AB1;1.03484132734247;1.02549513556164 inizio è
1.03484132734247 fine dell'intervallo1.02549513556164. Funziona quando si accende MT4 (come un normale indicatore sul gafik), ogni giorno sul grafico e aggiunge tutti i dati esattamente per il giorno corrente una volta, tutte le linee applicate in precedenza non viene rimosso dal grafico e non si duplica. Con tutto ciò seleziona e visualizza tutti i segmenti e gli intervalli del giorno, solo dove si trova ora la finestra attiva e su altre finestre attive (cioè, dove è in esecuzione) (cioè, ha aperto una coppia e l'indicatore ha disegnato tutti i segmenti e gli intervalli del giorno corrente e si è fermato, e così via per le coppie).

Per esempio, come dovrebbe essere la scheda dell'indicatoreParametri di ingresso:

Переменная________Значение
Funtik________//--Общие настройки--//
Disegna TF________true
Disegna TN _______true
Disegnare AB1______vero
Disegnare AB2______false
Colore della didascalia del testo _______Black
Шрифт подписей__________________Arial
Dimensione del carattere per le didascalie del testo ________9
Colore della linea TF ______________
Tipo di linea TF _______________
TN Linea colore ______________
Tipo di linea TN _______________
Colore della banda AB1__________
Colore della banda AB2__________
Frequenza dei file in secondi ______2
Nome del file ___________5.csv

provato a scarabocchiare me stesso, ma non ottenere una cosa maledetta anche se sembrava facile (ma io sono un umanitario, cosa si può fare....) Aiuto per favore annegamento !!!!!!!!


//+------------------------------------------------------------------+
//|                                                        Funtik.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_chart_window
//---- input parameters
extern string    Funtik="5.csv";
//+------------------------------------------------------------------+
//| extern variables                                       |
//+------------------------------------------------------------------+
extern  bool    РисоватьTB = false      ;
extern  bool    РисоватьTN = false      ;
extern  bool    РисоватьTF = false      ;
extern  bool    РисоватьAB1 = false     ;
extern  bool    РисоватьAB2 = false     ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
      int handle,sst=1;
     double  NameCena;
     string NameF ,NameTi,NameFT;
      bool h1;
      
   while(sst>0)
                 {
   handle=FileOpen(Funtik,FILE_CSV|FILE_READ,';');
 //  Comment ("Файл ",Funtik,"открыт");
   if(handle>=0)
    {
     NameF=FileReadString(handle);           // Читается наименование бумаги
     NameTi=FileReadString(handle);          // Читается первая котировка и подставляется в начало первого отрезка линии или диапазона
     NameCena=FileReadNumber(handle);        // Читается цена последней котировки для первого отрезка линии или диапазона
     NameFT=FileReadString(handle);          // Читается последняя котировка для диапазона
     
     Alert(NameF," ",NameTi," ",NameCena," ",NameFT);
       if(FileIsEnding(h1))
       {
     FileClose(h1);
     return(false);
     sst=0;
       }
    }
               }
     FileClose(handle);   
 
  //fComment(Funtik);
//----
   return(0);
  }
//+------------------------------------------------------------------+

 

Ciao!

Per favore aiutatemi a trovare un bug nel seguente programma!!!

//+------------------------------------------------------------------+
//|test.mq4 |
//| Copyright 2018, MetaQuotes Software Corp.
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#proprietà copyright "365_MA"
#proprietà link "https://www.mql5.com"
#proprietà versione "1.00"
#proprietà rigorosa

extern Period_MA = 365; //Periodo MA 1
extern double Delta = 0.0010; //La distanza alla quale l'ordine può essere aperto

string Symb; //nome dello strumento commerciale
//int Total; //numero di ordini

//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto|
//+------------------------------------------------------------------+
int init()
{
//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperta|
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("Obj_Label");
ObjectDelete("Obj_Label2");
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto|
//+------------------------------------------------------------------+
int start()
{



doppio prise = Bid;// prezzo corrente
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //il valore della media mobile
doppio Price2MA = prezzo - CurrMAValue;//distanza tra MA e prezzo
datetime NextClose = Time(0) + Period()*60*2;//ora di chiudere
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1; //tempo di chiusura in minuti

//int err;



//aggiorna le informazioni di testo sul grafico

ObjectSetText ("Obj_Label", "TF" + Period() + ", " + DoubleToStr(price, 4) + ", tick " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Delta " + DoubleToStr(Delta,4) + ", MA value " + DoubleToStr(CurrMAValue, 4) + ", distance to MA " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//considerare il prezzo e generare avvisi

if ((MathAbs(Price2MA) < Delta) && // se la distanza da МА è inferiore a delta
(Prezzo > CurrMAValue) && // e il prezzo è superiore alla MA
(Open(0) > CurrMAValue+Delta) // e la candela attuale ha aperto più in alto di MA+Delta
(
Allarme ("Il prezzo si avvicina alla MA dall'alto;)
)

se ((MathAbs(Price2MA) < Delta) && // se la distanza dalla MA è inferiore al delta
(prezzo < CurrMAValue) && // e il prezzo è sotto la MA
(Open(0) < CurrMAValue-Delta)) // e la candela attuale ha aperto sotto il delta della MA
(

Allarme ("Il prezzo si è avvicinato sotto la MA;)
)

ritorno(0);


//+------------------------------------------------------------------+

Dopo aver compilato il seguente errore

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Куда исчезли "Сообщения"? У меня в профиле исчез раздел...
File:
Error.jpg  60 kb
 
berkley75:

Ciao!

Per favore aiutatemi a trovare un bug nel seguente programma!!!


Dopo aver compilato il seguente errore.

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "365_MA"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int    Period_MA = 365;  //Период МА 1
extern double Delta = 0.0010;   //На каком расстоянии открывать ордер

string Symb;                  //Название торгового инструмента
//int Total;                  //количество ордеров

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
 {
//----
 
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
 {
//----
   ObjectDelete("Obj_Label");
   ObjectDelete("Obj_Label2");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
 {
   
 

double prise = Bid;                                                             //текущая цена
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //значение скользящей средней
double Price2MA = price - CurrMAValue;                                          //расстояние о МА до цены
datetime NextClose = Time(0) + Period()*60*2;                                   //время до закрытия
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;                    //время до закрытия в минутах

//int err;



//обновление текст информации на графике

ObjectSetText ("Obj_Label", "ТФ" + Period() + ", " + DoubleToStr(price, 4) + ", тик " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Дельта " + DoubleToStr(Delta,4) + ", знач МА " + DoubleToStr(CurrMAValue, 4) + ", расст до МА " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//анализ цены и выдача алертов

if ((MathAbs(Price2MA) < Delta) &&   // если расстоание до МА меньше дельты
   (Price > CurrMAValue) &&          // и цена выше МА
   (Open(0) > CurrMAValue+Delta))    // и текущая свеча открылась выше, чем МА+дельта
( 
   Alert ("Цена подощла к МА сверху");
)

if ((MathAbs(Price2MA) < Delta) &&   // если расстояние до МА меньше дельты
   (price < CurrMAValue) &&          // и цена ниже МА
   (Open(0) < CurrMAValue-Delta))    // и текущая свеча открылась ниже, чем МА-дельта
( 

   Alert ("Цена подошла к МА снизу");
)

   return(0);
}
   
   
//+------------------------------------------------------------------+


Una parentesi graffa è stata lasciata fuori.

 
Si prega di consigliare come risolvere l'errore di quantità di lotti non validi per la funzione FreeMarginCheck in EA, quando accidentalmente si imposta un valore di volume (lotto) negativo. Per avere un messaggio sul lotto sbagliato, senza messaggio di errore, nel tester
 
Roman Sharanov:

Devo integrare lo zigzag nel mio indicatore (ora conta per maniglia)

Il fatto è che il mio indicatore non usa OnCalculate().

Allora, come faccio a far funzionare lo zigzag e come ottengo tassi_totali e prev_calcolati?

Il rate_total è il numero di barre del grafico. Viene determinato utilizzando la funzione Bars.

prev_calculated - create un analogo per conto vostro, dichiaratelo globalmente (o staticamente) e scriveteci il numero di barre effettivamente calcolato nell'iterazione corrente. Significa che, dopo aver calcolato con successo i valori dell'indicatore, dobbiamo registrare il numero di barre attuali in esso. Se i calcoli non hanno successo, è meglio annullarlo per ricalcolare i valori dell'indicatore per ogni barra della storia alla prossima iterazione.

 

Re: Alekseu Fedotov

Cos'è un tutore, scusa

 
berkley75:

Re: Alekseu Fedotov

Cos'è un tutore, scusa

Tra parentesi, l'argomento della funzione sin(30)
Tra parentesi quadre, l'indice della matrice x[25].
void start()
{
In parentesi graffe blocco operatore
}
 
Salve, potreste dirmi come mostrare/rimuovere un certo simbolo nella finestra "panoramica del mercato"?
 
STARIJ:
Tra parentesi l'argomento della funzione sin(30)
tra parentesi quadre l'indice della matrice x[25]
void start()
{
In parentesi graffe blocco operatore
}
Grazie, ancora non compila! Anche se si mette una parentesi graffa alla fine, cosa che ho notato!!!!