Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1226

 
Alexey Belyakov:


Neanche questo ha funzionato.

Che razza di folletto ama i chilometri di codice...

Il vostro problema può essere risolto in SEI righe di codice, tenendo conto della dichiarazione delle variabili.

/************************Expert tick function************************/
void OnTick()
 {
  bool signal = true;
  datetime timeBar = iTime(_Symbol, PERIOD_CURRENT, 0);// период можно поставить по своему усмотрению
  datetime static timeOpen = 0;
  if(timeBar > timeOpen)
   {
    if(signal)
     {
      // открыть позицию
      timeOpen = timeBar;
     }
   }
 }/******************************************************************/

Spero che tu riesca a capire la variabile del segnale.

 

О! Funziona! Grazie, compagni, per le idee!

Ma ho dovuto modificarlo un po'. È diventato anche più facile, senza (vero). Anche se non posso spiegare questa complicata logica MQL).

È così che l'ho implementato:

datetime timeBar = iTime(_Symbol,PERIOD_CURRENT, 0);// период можно поставить по своему усмотрению
datetime static timeOpen = 0;

if((PositionsTotal()==0)&&(c0>h1)&&(rGENUP>0.30)&&(timeBar > timeOpen))    // Условие для открытия позиции.
     {
      MqlTradeRequest request;
      MqlTradeResult  result;
      request.action   =TRADE_ACTION_DEAL;                         // тип торговой операции
      request.symbol   =Symbol();                                 // символ
      request.volume   =1;                                       // объем в 1 лот
      request.type     =ORDER_TYPE_BUY;                         // тип ордера
      request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия
      request.deviation=3;
      request.sl    = NormalizeDouble(Ask-50*_Point,_Digits);
      request.tp    = NormalizeDouble(Ask+50*_Point,_Digits);    

      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
      //--- информация об операции
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      // допустимое отклонение от цены
timeOpen = timeBar;
}
Mi chiedo perché ci sia un codice così grande in MQL5 per l'apertura delle posizioni. A differenza di MQL4. In 4 è solo una linea. Possiamo ridurlo? Per esempio, possiamo rimuovere il gestore degli errori?


Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Belyakov:

О! Funziona! Grazie, compagni, per le idee!

Ma ho dovuto modificarlo un po'. È diventato anche più facile, senza (vero). Anche se non posso spiegare questa complicata logica MQL).

È così che l'ho implementato:

Mi chiedo perché ci sia così tanto codice in MQL5 per aprire una posizione. A differenza di MQL4. In 4, è solo una linea. Ma qui... Si può accorciare? Per esempio, possiamo rimuovere il gestore degli errori?


Usare le classi commerciali. E il codice sarà molto breve.

Esempio:

//+------------------------------------------------------------------+
//|                                            Only_one_purchase.mq5 |
//+------------------------------------------------------------------+
#property version   "1.003"
#property script_show_inputs
#include <Trade\Trade.mqh>
CTrade         m_trade;          // trading object
//--- input parameters
input ENUM_POSITION_TYPE   InpPositionType   = POSITION_TYPE_BUY; // Position Type
input double               InpVolume         = 0.0;               // Volume
input ulong                m_magic           = 15489;             // magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   m_trade.SetExpertMagicNumber(m_magic);
//--- open a position
   if(InpPositionType==POSITION_TYPE_BUY)
      m_trade.Buy(InpVolume);
   else
      m_trade.Sell(InpVolume);
  }
//+------------------------------------------------------------------+
 
Alexey Belyakov:

О! Funziona! Grazie, compagni, per le idee!

Ma ho dovuto modificarlo un po'. È diventato anche più facile, senza (vero). Anche se non riesco a spiegare questa complicata logica MQL).

Questo è il modo in cui l'ho implementato:

Mi chiedo perché ci sia un codice così grande in MQL5 per l'apertura delle posizioni. A differenza di MQL4. In 4, è solo una linea. Ma qui... Puoi accorciarlo? Per esempio, possiamo rimuovere il gestore degli errori?


Quindi, se avete nella condizione

if((PositionsTotal()==0)&&

perché avete bisogno di più controlli per un nuovo bar? O c'è un'opzione che la posizione sarà chiusa alla stessa barra e la seconda apertura dovrebbe essere proibita?

 
Alexey Belyakov:

О! Funziona! Grazie, compagni, per le idee!

Ma ho dovuto modificarlo un po'. È diventato anche più facile, senza (vero). Anche se non riesco a spiegare questa complicata logica MQL).

È così che l'ho implementato:

Mi chiedo perché ci sia un codice così grande in MQL5 per aprire una posizione. A differenza di MQL4. In 4, è solo una linea. Ma qui... Puoi accorciarlo? Per esempio, possiamo rimuovere il gestore degli errori?


Sapete, molto tempo fa, quando c'era MQL4, la gente diceva indignata che non era stato dato loro un accesso di livello inferiore - in modo che potessero fare qualcosa a modo loro.

Beh, l'hanno fatto - ora hanno dato accesso a OrderSend() in MQL4 - per così dire, hanno implementato la sua logica in MQL - quindi fate quello che volete. Ma no - ora ho delle lamentele perché è troppo complicato.

Complicato? Nessun problema - datemi le classi commerciali in SB - sono quasi le stesse delle funzioni commerciali standard di MQL4.
In MQL4 tali classi sono le funzioni commerciali. E in MQL5 - tutto con accesso aperto.

Approfittatene.

 
Artyom Trishkin:

Sapete, molto tempo fa, quando c'era MQL4, la gente diceva indignata che non gli davano un accesso di livello inferiore - in modo che potessero fare qualcosa a modo loro.

Beh, l'hanno fatto - ora hanno dato accesso a OrderSend() in MQL4 - per così dire, hanno implementato la sua logica in MQL - quindi fate quello che volete. Ma no - ora ho delle lamentele perché è troppo complicato.

Complicato? Nessun problema - datemi le classi commerciali in SB - sono quasi le stesse delle funzioni commerciali standard di MQL4.
In MQL4 tali classi sono le funzioni commerciali. E in MQL5 - tutto con accesso aperto.

Approfittatene.

Docente e Docente. Perché sei così arrabbiato (oggi) ©

 
Alexey Viktorov:

Docente, ah Docente. Perché sei così arrabbiato (oggi) ©

Entrare nel buco di ghiaccio...

 
Alexey Viktorov:

Quindi se avete una condizione

Perché avete bisogno di controllare un nuovo bar? O c'è un'opzione per cui la posizione si chiuderà sulla stessa barra e dovremmo disabilitare una seconda apertura?

Esattamente - c'è un'opzione per chiudere la posizione sulla stessa barra.

 

(Tagliare il nuovo muro. ) Il "muro" è chiamato breakeven.

Questo è come è stato implementato in MQL4:

(L'ho copiato da qualche parte che non ricordo).

int BULevel=30;

   for(int i=0; i<OrdersTotal(); i++) 
      {
       if(OrderSelect(i, SELECT_BY_POS))
        {      
         if(OrderType()==OP_BUY) 
          {
           if(OrderOpenPrice()<=(Bid-BULevel*Point)&&OrderOpenPrice()>OrderStopLoss())
            {      
             int p=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-50*Point,OrderTakeProfit(),0,Green);
            }
           }       
 
         if(OrderType() == OP_SELL) 
           {
            if(OrderOpenPrice()>=(Ask+BULevel*Point)&&OrderOpenPrice()<OrderStopLoss()) 
             {
              p=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+50*Point,OrderTakeProfit(),0,Red);
             }
           } 
         }
       }

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

Ma ecco come è implementato in 5-PC. Come si fa?

Ho guardato tra le Trading Classes, ma non lo vedo. Ma la cosa è necessaria. Cosa dicono i professionisti?

 

Come posso evitare che le compravendite di altri grafici appaiano sul grafico?

Solo i trade del robot che si trova sul grafico dato.