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

 
Artyom Trishkin:

Più veloce da capire e da comprendere

scrivere i prezzi, come prenderli dopo, quando cosa?

void PriceTimePos(string sy="",int op=-1,int mn=-1)
  {
  double Цены[3];
   datetime t;
   bool daa;
   int d,k_=OrdersTotal(),typ_;
   double   r=0;
   int      i,k=OrdersHistoryTotal();

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(OrderCloseTime()>=TimeCurrent()-2440*60)
                       {
                        t=OrderCloseTime();
                        r=OrderOpenPrice();
                        sl=OrderStopLoss();
                        tp=OrderTakeProfit();
                        lot=OrderLots();
                        typ_=OrderType();
                        Print("OpenPrice",r);
                       Цены[0]=OrderOpenPrice();
                    
                       }
                    }
                 }
              }
           }
        }
     }
//
  }
da inserire in questo ciclo al posto di r
                        daa=false;
                        for(i=0; i<k; i++)
                          {
                           if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                             {
                              if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
                                {
                                 if(OrderType()>1 && OrderType()<6)
                                   {
                                    d=MarketInfo(OrderSymbol(), MODE_DIGITS);
                                    r=NormalizeDouble(r, d);
                                    if(r==NormalizeDouble(OrderOpenPrice(),d)) daa=true; 
                                   }
                                }
                             }
                          }
 

Ciao, ho fatto una funzione che dovrebbe aumentare lo stop loss dopo che l'ultimo ordine ha chiuso in meno.

Lo aumenta del passo impostato, fino a raggiungere il massimo. Di conseguenza, imposta sempre il valore originale dello stop loss.

Cosa c'è che non va? Grazie!

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

doppio SL()

{

doppio sL;

se(OrdiniStoriaTotale()==0)

{

sL=StopLoss;

}

if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))

{

se(OrderProfit()>=0)

{

sL=StopLoss;

}

if(OrderProfit()<0 && OrderType()==OP_BUY)

{

sL=OrderOpenPrice()-OrderStopLoss()+SLStep;

}

if(OrderProfit()<0 && OrderType()==OP_SELL)

{

sL=OrderStopLoss()-OrderOpenPrice()+SLStep;

}

}

se(sL>maxStep)

{

sL=StopLoss;

}

ritorno(sL);

}

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

 
Artyom Trishkin:
  1. Hai ragione a restituire valori da funzioni non nulle, ma è meglio passare a nuovi binari - non c'è niente di complicato.
  2. Scrivete, non dimenticate di inserire la direttiva #property strict proprio all'inizio del codice - dove sono scritte tutte le direttive, leggete i codici di errore - le loro descrizioni sono nella documentazione e tutto andrà bene e non sarà complicato.
Dove posso trovare i codici di errore? Dove si trova questa documentazione?
 
#property strict

int Count=0;

void OnInit()     
{
   Alert ("Сработала ф-ия init() при запуске");   // Сообщение
   return;                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
void OnStart()                                                                       // Спец. ф-ия start()
   {
   double Price = Bid;                                                      // Локальная перемен.
   Count++;                                                                      // Счётчик тиков
   Alert("Новый тик ",Count," Цена = ",Price);       // Сообщение
   return;                                                                        // Выход из start()
   }
void OnDeinit()                                                                              // Спец. ф-ия deinit()
   {
   Alert ("Сработала ф-ия deinit() при выгрузке");         // Сообщение
   return;                                                                                 // Выход из deinit()
   }

Cosa sto scrivendo di sbagliato?

Dovrebbe andare così http://prntscr.com/lu1kb9


Provato a inserire i dati sotto il modello corrente

//+------------------------------------------------------------------+
//|                                                            п.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   Alert ("Сработала ф-ия init() при запуске");   // Сообщение
                                                                       // Выход из init()
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
Alert ("Сработала ф-ия deinit() при выгрузке");         // Сообщение
   return;
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 
   double Price = PRICE_OPEN;                                                      // Локальная перемен.
   Count++;                                                                      // Счётчик тиков
   Alert("Новый тик ",Count," Цена = ",Price);       // Сообщение
   return;                                                                        // Выход из start()
   
   
  }
//+------------------------------------------------------------------+


Ma non è ancora la stessa cosa. aiutatemi
Скриншот
Скриншот
  • prnt.sc
Снято с помощью Lightshot
 
Per favore, qualcuno ha una funzione che può passare un array per calcolare il drawdown massimo?
 

Buon pomeriggio.

Sto padroneggiando emq-el dal tutorial di Sergei Kovalev.

Ho scaricato l'Expert Advisor da lì, l'ho compilato, sembra anche funzionare, ma durante la compilazione, mostra alcuni commenti, non errori, ma avvertimenti.

Cosa devo cambiare per farlo compilare senza errori? Grazie in anticipo.

File:
expert.mq4  28 kb
 
Sergey Branin:
Dove posso trovare i codici di errore? Dove si trova questa documentazione?

Nel menu di questo sito web - cerca

 
Artyom Trishkin:

Nel menu di questo sito - cercate

Artem, c'è una documentazione su mql5, e le domande sono nella sezione mql4

Sergey Branin:
Dove posso trovare i codici di errore? Dove si trova questa documentazione?

Ecco la documentazione di mql4. Si può anche premere F1 in MetaEditor

Справочник MQL4
Справочник MQL4
  • docs.mql4.com
MetaQuotes Language 4 (MQL4) - встроенный язык программирования торговых стратегий, разработанный компанией MetaQuotes Software Corp. на основе своего многолетнего опыта в создании торгово-информационных платформ. Этот язык позволяет писать собственные программы-эксперты (Expert Advisors), автоматизирующие управление торговыми процессами и...
 
Alexey Viktorov:

Artyom, c'è la documentazione di mql5? e le domande sono nella sezione mql4

C'è una documentazione su mql4. Ed è meglio premere F1 mentre si è nel MetaEditor

Ahh... Beh, non è nemmeno così complicato - è più veloce mettere il dito su F1 e trovare tutto ciò di cui hai bisogno che aspettare 24 ore per una risposta sul forum. Non capisco ...

 
Ciao, sono nuovo della programmazione. Non ho trovato nessun codice pronto da nessuna parte. L'idea è la seguente: ho bisogno di controllare un indicatore personalizzato da un EA, o meglio cambiare i suoi parametri esterni (uno) quando accade qualche evento. La logica in breve - se il lotto (o per esempio il numero di posizioni) > un valore predefinito, l'impostazione esterna nell'indicatore (che è in un'altra finestra e non è collegata a questo EA) cambia al volo senza reinizializzazione dell'indicatore. Forse puoi provare a farlo attraverso
 string ServiceCustomIndicatorByIndexA(int nIndex);// я даже не знаю тут   ANSI или UNICODE нужно
и
int ServiceGetNamesIndicatorsMA(int hwndChart,int nWindow,string &asIndicators[],int nSize);   
Non so come farlo, qualche programmatore può scrivere un semplice blocco di codice per un esempio. c/o Denis