Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 72

 
Vitalie Postolache:


Dirò la stessa cosa. Non sei bravo in logica. Qual è il problema per calcolare immediatamente il lotto iniziale, in base ai fondi disponibili e al valore del rischio (credo che sia stato scritto circa il 3%)? Perché devi fare tutto in un solo posto?

Prendete il valore del margine libero, moltiplicate per il rischio, dividete per 100 e il valore del margine per 1 lotto - ecco la formula più semplice per calcolare il lotto con una determinata percentuale del margine libero. Inoltre, è necessario prendere in considerazione il passo del cambio di lotto e prevenire il superamento della dimensione del lotto min/max, consentito dalla società di intermediazione:


Ti sto dicendo che l'EA negozia in un breve periodo di tempo in cui c'è la probabilità che si aprano 9 ordini opposti consecutivi che si sovrappongono l'un l'altro e ogni ordine successivo è moltiplicato per 2, quindi il margine potrebbe non tenere e l'ultimo ordine pendente potrebbe non aprirsi, e quindi dobbiamo calcolare dall'ultimo lotto massimo possibile. Ho pensato che il miglior numero di ordini in un intervallo di 5-10 minuti è 9. In generale ho bisogno di calcolare un margine nel caso in cui tutti gli ordini saranno aperti e sulla base di questi dati in ordine inverso per calcolare il primo lotto.

 
se(OrdiniTotali() >= ContoOrdini)
{
ritorno;
}
//----
se(r > 50 && p > m) //aprire ordine di acquisto
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //aprire ordine di acquisto
}
//-----
se(r < 50 && p < m) //aprire le condizioni dell'ordine di vendita
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue);
}
//----- ordini di chiusura
per (int i=1; i<=OrdiniTotali(); i++)
{
se(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
se(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red);
}
}

}

Dove ho sbagliato a scrivere? Penso di averlo preso da un esempio, potresti per favore dirmi come scriverlo correttamente in modo che l'ordine si chiuda

Mi sto scervellando.

 
funnyrain8:
se(OrdiniTotali() >= ContoOrdini)
{
ritorno;
}
//----
se(r > 50 && p > m) //aprire ordine di acquisto
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //aprire ordine di acquisto
}
//-----
se(r < 50 && p < m) //aprire le condizioni dell'ordine di vendita
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue);
}
//----- ordini di chiusura
per (int i=1; i<=OrdiniTotali(); i++)
{
se(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
se(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red);
}
}

}

Dove ho sbagliato a scrivere? Penso di averlo preso da un esempio, potresti per favore dirmi come scriverlo correttamente in modo che l'ordine si chiuda

Mi sto scervellando.


 if(OrdersTotal()>=OrderCount)  //Обрати внимание на эту конструкцию
     {                            //
      return;
     }
//---- 
   if(r>50 && p>m) //условия открытия ордера на покупку
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
               OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
      ticketB=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку     

     }

//-----     
   if(r<50 && p<m) //условия открытия ордера на продажу
     {
     for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
               OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
      ticketS=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue);
     }

Come questo
 
funnyrain8:
se(OrdiniTotali() >= ContoOrdini)
{
ritorno;
}
//----
se(r > 50 && p > m) //aprire ordine di acquisto
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //aprire ordine di acquisto
}
//-----
se(r < 50 && p < m) //aprire le condizioni dell'ordine di vendita
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue);
}
//----- ordini di chiusura
per (int i=1; i<=OrdiniTotali(); i++)
{
se(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
se(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red);
}
}

}

Dove ho sbagliato a scrivere? Penso di averlo preso da un esempio, potresti per favore dirmi come scriverlo correttamente in modo che l'ordine si chiuda

Mi sto scervellando.


Se l'ordine è selezionato sul biglietto, non hai bisogno di un'azione nel ciclo. Se vuoicorreggere il codice, usa il pulsante SRC perincollare il codice nel messaggio.
 
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict    
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int ticketB,ticketS;
void OnTick()
//------------------------------------------------------------------------------------------------
{
double p = iClose("EURUSD",PERIOD_M15,0);                                    //показание текущей цены 
double r = iRSI  ("EURUSD",PERIOD_M15,21,PRICE_CLOSE,0);                     //значение индюка RSI
double m = iMA   ("EURUSD",PERIOD_M15,89,0,MODE_EMA,PRICE_CLOSE,0);          //значение индюка МА
int    OrderCount  = 1;

//---------------ПОДСЧЕТ ОРДЕРОВ------------------------------------------------------------------
if(OrdersTotal() >= OrderCount)
          {
             return;
          }   
//-------------ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ--------------------------------------------------------------------
/*if(r > 50 && p > m)                                                        //условия открытия ордера на покупку
    {   
        ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green);         
    }
//------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ--------------------------------------------------------
if(r<50 && p<m)                                                           
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
                  ticketB = OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
     }*/
//------------------ОТКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r < 50 && p < m)                                                        //условия открытия ордера на продажу
    {
        ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); 
    } 
//---------------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r>50 && p>m) 
     {
   for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketS,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
                  ticketS = OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
     }
}
//+------------------------------------------------------------------+
Grazie per l'SRC), questo è quello che sembra, ts sembra così, vendere dovrebbe accadere quando la candela ha chiuso sotto il wop e rsi sotto 50, e chiudere l'ordine a condizioni opposte, e contemporaneamente dopo la chiusura dovrebbe accadere comprare e dopo chiudere, quindi un ordine e non più e così via ciclicamente ... ma ora ho un ordine aperto e questo è tutto, e gli stop non funzionano ...
 
funnyrain8:
Grazie per l'SRC), questo è quello che sembra, ts sembra così, vendere dovrebbe accadere quando candela chiusa sotto il polso e rsi sotto 50, e chiudere l'ordine alle condizioni opposte, e allo stesso tempo dopo la chiusura dovrebbe accadere l'acquisto e dopo la chiusura, poi un ordine e non più e così via ciclicamente ... ma ora ho aperto un ordine e tutti, e si ferma non funziona ...


L'ho riscritto nel mio stile, spero che tu capisca, se qualcosa non è chiaro, non esitare a chiedere

//+------------------------------------------------------------------+
//|                                                   funnyrain8.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict

input int             MagicNumber  = 20110315;       // Номер копии
input string          CommentOrder = "Origenal";     // Комментарий к ордеру
input int             Slippage=100;             // Проскальзование (Пипс)
input double          Lot=0.01;           // Объем лота 
input int             SignalBar=0; // Сигнальный бар 

sinput string            s1=NULL; // Setting indicator slow МА
input int                ma_period=89;    // Period
input ENUM_MA_METHOD     ma_method=MODE_EMA;//Method calculation
input ENUM_APPLIED_PRICE ma_price=PRICE_CLOSE;//Price calculation

sinput string            s2=NULL; // Setting indicator RSI
input int                rsi_period=21; // Period
input ENUM_APPLIED_PRICE rsi_price=PRICE_CLOSE;//Price calculation
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(TotalOrder()==0)OrderOpen(GetSignal());
   else OrderClose(GetSignal());
  }
//+------------------------------------------------------------------+
int GetSignal()
  {
   double rsi = iRSI(_Symbol,PERIOD_CURRENT,rsi_period,rsi_price,SignalBar);                     //значение индюка RSI
   double ma = iMA   (_Symbol,PERIOD_CURRENT,ma_period,0,ma_method,ma_price,SignalBar);          //значение индюка МА

   if(Close[SignalBar]>ma && rsi>50.0)return(OP_BUY);
   if(Close[SignalBar]<ma && rsi<50.0)return(OP_SELL);
   return(WRONG_VALUE);
  }
//+------------------------------------------------------------------+
int TotalOrder()
  {
   int value=0;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderType()>1)continue;
      value++;
     }
   return(value);
  }
//+------------------------------------------------------------------+
void OrderOpen(int type)
  {
   if(type==WRONG_VALUE)return;
   double price_open=(type==OP_BUY)?NormalizeDouble(Ask,_Digits):NormalizeDouble(Bid,_Digits);
   int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber);
   if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
  }
//+------------------------------------------------------------------+
void OrderClose(int type)
  {
   if(type==WRONG_VALUE)return;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderType()!=type)continue;
      double price_close=(type==OP_BUY)?NormalizeDouble(Bid,_Digits):NormalizeDouble(Ask,_Digits);
      bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage);
      if(!res)Print("Ошибка закрытия ордера № - ",GetLastError());
     }
  }
//+------------------------------------------------------------------+

...

 
Sergey Gritsay:


riscritto nel mio stile, spero che tu capisca, se non capisci qualcosa chiedi

...


oh, pensavo di aver scritto quasi tutto tranne la chiusura e ho ancora molto da imparare...grazie mille ora almeno ho un esempio da cui partire...tin, grazie ancora)
 
Salve. Ho scaricato il software Metatrader 5. Ho firmato per 2 segnali. Il saldo del mio conto è positivo per 20$. Sto cercando di installare l'hosting virtuale e non funziona nulla. Premo il navigatore, mi collego al conto di trading, ma non ho nemmeno questa scheda nella tabella dell'hosting virtuale. Vi sto inviando degli screenshot. Come mi collego all'hosting condiviso?
File:
3p46y0.jpg  273 kb
g4ppe22.jpg  264 kb
 
Жанна Платонова:
Salve. Ho scaricato il software Metatrader 5. Ho firmato per 2 segnali. Il saldo del mio conto è positivo per 20$. Sto cercando di installare l'hosting virtuale e non funziona nulla. Premo il navigatore, mi collego al conto di trading, ma non ho nemmeno questa scheda nella tabella dell'hosting virtuale. Vi sto inviando degli screenshot. Come mi collego all'hosting condiviso?

Clicca su aiuto nel menu principale.
 
Salve. Ho una domanda - sul mac (sierra) in tutti i consegnati (attraverso wine) da diverse aziende piattaforme mt4 lo stesso glitch - il terminale se si rilascia dal suo posto normale in basso per spostarlo come una finestra libera - si restringe e lavorare attraverso di esso è completamente impossibile. Disattivare l'auto-arrangiatore non funziona. Restituire il terminale sul primo posto è assolutamente impossibile - cioè semplicemente non si attacca e non si apre più. Ho una domanda - qualcuno può conoscere una scorciatoia o un pulsante per riportare l'intera interfaccia al suo posto originale. Sinceramente.