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

 
Mikhail Tkachev:

Sto chiedendo aiuto alla comunità...
Come dichiarare e creare oggetti globali MQL5 correttamente?

Quelli globali sono dichiarati qui

//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- 
int      Global_1;
double   Global_2;
string   Global_3;
long     Global_4;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
 
Alexey Viktorov:

Non so come dirvi di leggere la documentazione. Se l'avete letto e la funzione standard non è adatta per qualche motivo, avreste dovuto dirlo subito...

Beh, a proposito di "inviare", lasciamo che siano i moderatori a decidere chi inviare e dove inviarlo...! Ban, per esempio... Indovina chi. Per quanto riguarda le funzioni regolari, non ho visto l'analisi json e il salvataggio/scrittura di file json nella documentazione. Ma tu, come al solito, conosci qualche sezione segreta della documentazione dove è tutto lì... E non sapevo... Porca puttana. Vergogna. Sto per essere zittito da Alexei... :)

 

aiutare la gente, andando ad aprireun massimo di 2 ordini allo stesso tempo, ho messo così non si apre nessuno, senza pos_total si apre


void OPENORDER(string ord)

  {
    int pos_total=PositionsTotal();
    double priceL=m_symbol.Ask();
   if (pos_total>=2)
   {
   if(ord=="Sell")      
   
        //--- check for free money
            if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_BUY,my_lot,priceL)<0.0)
               printf("We have no money. Free Margin = %f",m_account.FreeMargin());
            else
      if(!m_trade.Sell(my_lot,Symbol(),m_symbol.Bid(),my_SL,my_TP,""))
         Print("BUY_STOP -> false. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of Retcode: ",m_trade.ResultRetcodeDescription(),
               ", ticket of order: ",m_trade.ResultOrder());                     // Если sell, то не открываемся
     double priceS=m_symbol.Bid();
   if(ord=="Buy")  
         //--- check for free money
            if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_SELL,my_lot,priceS)<0.0)
               printf("We have no money. Free Margin = %f",m_account.FreeMargin());
            else
      if(!m_trade.Buy(my_lot,Symbol(),m_symbol.Ask(),my_SL,my_TP,""))
 
         Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of result: ",m_trade.ResultRetcodeDescription(),
               ", ticket of deal: ",m_trade.ResultDeal());
   return;
 }
}


Cosa sto facendo di sbagliato?

 
Eugen8519:

aiutare la gente, andando ad aprireun massimo di 2 ordini allo stesso tempo, ho messo così non si apre nessuno, senza pos_total si apre



Cosa sto facendo di sbagliato?

Hai scritto di aprire se hai già 2 o più posizioni
if (pos_total<=2)
 
Alexey Viktorov:

Makar, prima facevi la cosa giusta e ora vuoi fare la cosa stupida...

Ripensate alla vostra quinta elementare di matematica o giù di lì. Quanto è (-3)-(-7) e quanto è (-3)+(-7)?

È difficile da controllare con una calcolatrice, Excell vi aiuterà.


Alexey conosce la matematica dalla quinta elementare. Bravo, Alexey. Solo Capitan Ovvio. :)

 
Mihail Matkovskij:

Alexei conosce la matematica fin dalla quinta elementare. Bravo, Alexei.

In questo caso, si sbaglia.
 
MakarFX:

Sì, grazie. Sono saltato alle conclusioni. Ho capito bene)

La domanda non era che la funzione può avere valori negativi, ma perché aggiungere swap e commissioni al profitto. Tu e Alexei probabilmente non avete capito.

Tsaryoff5614 voleva calcolare il profitto dell'ordine nella storia e la funzione si chiamava lastloss (se parli inglese).

https://www.mql5.com/ru/forum/160683/page1559#comment_23786144

Hai confuso te stesso e me. E poi tu e Alexey... Stupido...

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2021.08.02
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
MakarFX:
In questo caso si sbaglia.

Grazie per il suggerimento, ma non filtra affatto, apre fino a cinque posizioni

   if(InpTrailingOrderLimit==0)
        return;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingOrderLimit+ExtTrailingOrderStep)
                  if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailingOrderLimit+ExtTrailingOrderStep))        
                       OPENORDER("Buy");
              
                  
              }
            else
              {
               if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingOrderLimit+ExtTrailingOrderStep)
                  if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingOrderLimit+ExtTrailingOrderStep))))
                        OPENORDER("Sell");


gli dice di aprire le posizioni, non importa dove metto pos_total, non funziona

 
Eugen8519:

Grazie per il suggerimento, ma non filtra affatto, apre fino a cinque posizioni


Gli dice di aprire una posizione, non importa dove metto pos_total, non funziona.

Non c'è bisogno di rimuovere
if (pos_total<=2)

Devo cambiare il segno come ho scritto.

 
Mihail Matkovskij:

La domanda non era che la funzione può avere valori negativi, ma perché aggiungere swap e commissioni al profitto. Tu e Alexey probabilmente non avete capito.

Tsaryoff5614 voleva calcolare il profitto, ma la sua funzione si chiamava lastloss. Ha confuso se stesso e me. E ora tu e Alexey... Stupido...

Ecco perché lo aggiungiamo, in modo da poter calcolare tutto il profitto del periodo.