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

 
datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;  // Установили магик


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

for(int i = OrdersTotal(); i >=0; i--)                                            // цикл для проверки ордеров
{
int af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES);                                // Шаг 1: OrderSelect Выбираем ордер (SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if((OrderSymbol() == "EURUSD") && (OrderMagicNumber() == MagicNumber))return(0); // Шаг 2: Если символ EURUSD отсутствует,И если ордер присутствует , и ни один из ордеров НЕ содержит магикномер, то выходим из цикла.( выходим -значит откр. позицию) 
                                                                                    (если какое-либо условие из двух указанных не совпадает, то выходим) 
}
          

             
if ((Close[0]>High[1]))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1]))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}

La mia comprensione è che è come un controllo periodico della disponibilità. (C'è EURUSD? e c'è un ordine con il Magic specificato?) Se manca una delle condizioni, apriamo una posizione. Solo se entrambe le condizioni sono soddisfatte, apriamo una posizione.

Nella fase 2 ci viene chiesto. Supponiamo di avere un ordine aperto manualmente. Allora soddisfiamo la prima condizione (abbiamo lo stesso simbolo) e non soddisferemo la seconda condizione, poiché questo ordine non contiene magia. E se una delle condizioni non corrisponde, allora il codice dovrebbe aprire l'ordine. Questo è esattamente ciò che fa il codice. Ma al prossimo tick, apre il terzo, quarto e quinto ordine.....

Perché apre un terzo ordine?

Ma ci sono due ordini che soddisfano entrambe le condizioni in totale. Ci dovrebbe essere un controllo (cambiamento in return(0)), non un'apertura. , non l'apertura.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Buona notte a tutti! Potete dirmi se è possibile scrivere un codice in mql5 che disegni una linea sul grafico (immagine allegata) e registri tutte le coordinate di questa linea nel file? Se vuoi usare questa linea come base per il futuro, allora devi usarla come base per il robot di trading. diretto
 
GlushkoV_V_V:
Buona notte a tutti! Potete dirmi se è possibile scrivere un codice in mql5 che disegni una linea sul grafico (immagine allegata) e registri tutte le coordinate di questa linea nel file? Se volete disegnare una linea e riempirla con le coordinate, allora dovete fare un semplice ricalco della linea.

Tutto è nella documentazione.

Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
[in]  Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
 
Сергей Таболин:

Tutto è nella documentazione.

Grazie per il suggerimento, forse puoi aiutarmi a costruire uno di questi, naturalmente gratis.

 
GlushkoV_V_V:

Grazie per il suggerimento, ma forse puoi aiutarmi a costruire una di queste cose, non gratis ovviamente.

Non gratis - questo è per te)))

Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Убрать из советника второй индикатор заменить другим,изменить условие открытие ордера .Условие сделки покупка: НМА линия вверх второй индикатор столбик гистограмы выше нуля (второй индикатор пересечение нуля точка входа) по закрытой свече если нма и второй индикатор не изменили показания совершается покупка для продаже наоборот.Изменить...
 
Grazie mille, ma per me è come in cinese e non so come implementarlo nel codice.
 
Alexey Belyakov:

La mia comprensione è che è come un controllo periodico della disponibilità. (C'è EURUSD? e c'è un ordine con il Magic specificato?) Se manca una delle condizioni, apriamo una posizione. Solo se entrambe le condizioni sono soddisfatte, apriamo una posizione.

Nella fase 2 ci viene chiesto. Supponiamo di avere un ordine aperto manualmente. Allora soddisfiamo la prima condizione (abbiamo lo stesso simbolo) e non soddisfiamo la seconda condizione, poiché questo ordine non contiene magia. E se una delle condizioni non corrisponde, allora il codice dovrebbe aprire l'ordine. Questo è esattamente ciò che fa il codice. Ma al prossimo tick, apre il terzo, quarto e quinto ordine.....

Perché apre un terzo ordine?

Ma ci sono due ordini che soddisfano entrambe le condizioni in totale. Ci dovrebbe essere un controllo (cambiamento in return(0)), non un'apertura. ma non l'apertura.

== - se è uguale != - se non è uguale. Continuità - fine dell'iterazione del ciclo e inizio di una nuova iterazione del ciclo. Breaking - terminazione del ciclo e transizione al prossimo operatore che segue il ciclo, return - terminazione della funzione, nel vostro caso Onstart e attesa di un nuovo tick. E se un ordine con il tuo magik è aperto, dovrebbe terminare la funzione e lasciare in attesa di un nuovo tick.

Domanda: se vuoi aprire un ordine nella finestra corrente, perché devi specificare esplicitamente lo strumento, o vuoi aprire gli ordini dalla finestra di un altro strumento? Inoltre non è chiaro quanti ordini vuoi aprire. Secondo il vostro codice, solo un ordine può essere aperto e solo dopo che è stato chiuso, il secondo sarà aperto. Avete un mago e uno strumento per aprire una finestra. Inoltre, le condizioni di apertura degli ordini sono controllate per lo strumento corrente e non per gli Eurobucks.

datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;  // Установили магик


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

for(int i = OrdersTotal(); i >=0; i--)                                            // цикл для проверки ордеров
{
bool af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES);     // OrderSelect возвращает тип bool                           
                                               // Шаг 1: OrderSelect Выбираем ордер 
                                   //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return(0); // Шаг 2: Если символ Выбранного ордера 
                                        //равен EURUSD (заменено на текущий инструмент открытого окна) ,
                                       // И если магик Выбранного ордера равен магик то выходим из функции Онстарт.
// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров. 
                                                                                   
}
          

             
if ((Close[0]>High[1])) // клоз и хай здесь для текущего окна и инструмента. 
{
send=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber); // так же здесь цены аск и бид тоже для текущего инструмента
}

if ((Close[0]<Low[1]))  
{
send=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber); // и поинт кстати тоже.
}

return(0);
}
 
Valeriy Yastremskiy:

== - se uguale != - se non uguale. Kontinue - termina l'iterazione del ciclo e inizia una nuova iterazione del ciclo. Break - termina il ciclo e va all'operatore successivo al ciclo, return - termina la funzione, nel tuo caso Onstart e aspetta un nuovo tick. E se un ordine con il tuo magik è aperto, dovrebbe terminare la funzione e lasciare in attesa di un nuovo tick.

Domanda: se vuoi aprire un ordine nella finestra corrente, perché devi specificare esplicitamente lo strumento, o vuoi aprire gli ordini dalla finestra di un altro strumento? Non è nemmeno chiaro quanti ordini vuoi aprire. Secondo il vostro codice, solo un ordine può essere aperto e solo dopo che è stato chiuso, il secondo sarà aperto. Avete un mago e uno strumento per aprire una finestra. Inoltre, le condizioni di apertura degli ordini sono controllate per lo strumento corrente e non per gli Eurobucks.

- Sì, voglio aprire nella finestra corrente;

- Un ordine. L'ordine successivo non viene aperto fino alla chiusura dell'ordine precedente.

"Inoltre, le condizioni di apertura dell'ordine sono controllate per lo strumento corrente e non per gli Eurobucks" - allora ?

((OrderSymbol() == "EURUSD" )  ???
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Alexey Belyakov:

- Sì, voglio aprire nella finestra corrente;

- Un ordine. L'ordine successivo non viene aperto fino alla chiusura dell'ordine precedente.

"Inoltre, le condizioni di apertura dell'ordine sono controllate per lo strumento corrente e non per gli Eurobucks" - allora ?

E che cosa poi, per esempio, si ha una finestra aperta non Eurobucks, ma l'Eurofunt, si confronta il simbolo dell'ordine selezionato con Eurobucks, se è vero, allora sull'Eurobucks c'è un ordine, e se il nostro magik, poi ritorno dalla funzione OnStart, e se non, allora abbiamo impostato un ordine su Eurobucks, ma Kloz, High, Ask, Bid, si avrà un errore quando si aprono gli ordini, perché bid e ask per questi instuents sono diversi. E Symbol() restituirà il simbolo della finestra corrente e non ci saranno errori.

Usa il modello dal meta editor, c'è un pulsante Nuovo in alto a sinistra. La funzione OnStart è ancora usata, ma non è giusto, e OnStart è per gli script. Il modello giusto.

//+------------------------------------------------------------------+
//|                                                    forumtest.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                                  https://qstr.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://qstr.ru"
#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                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

Codice corretto. Manca il tuo commento all'ordine, e il mago non è considerato nel tuo codice. Nelle avvertenze alla linea di apertura nota Conversione implicita del tipo di un numero in una stringa!!!

//+------------------------------------------------------------------+
//|                                                    forumtest.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                                  https://qstr.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://qstr.ru"
#property version   "1.00"
#property strict

datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;  // Установили магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

for(int i = OrdersTotal(); i >=0; i--)                                            // цикл для проверки ордеров
{
bool af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES);     // OrderSelect возвращает тип bool                           
                                               // Шаг 1: OrderSelect Выбираем ордер 
                                   //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return; // Шаг 2: Если символ Выбранного ордера 
                                        //равен EURUSD (заменено на текущий инструмент открытого окна) ,
                                       // И если магик Выбранного ордера равен магик то выходим из функции Онстарт.
// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров. 
                                                                                   
}
          

             
if ((Close[0]>High[1])) // клоз и хай здесь для текущего окна и инструмента. 
{
send=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen); // так же здесь цены аск и бид тоже для текущего инструмента

}

if ((Close[0]<Low[1]))  
{
send=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,"My order",MagicNumber,0,clrGreen); // и поинт кстати тоже.
}

return;
  }
//+------------------------------------------------------------------+
 
Valeriy Yastremskiy:

ci sono molti errori nel tuo esempio

for(int i = OrdersTotal(); i >=0; i--)  

dovrebbe esserci:

for(int i = OrdersTotal()-1; i >=0; i--)  

qui i prezzi non sono normalizzati OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen);

Qui non capisco la logica per cui l'uscita da OnTick() è necessaria se la condizione è falsa.

if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return;

forse, dovremmo andare avanti con il cicloe calcolare semplicemente quanti ordini ci sono

Il tuo esempio è molto semplice nella logica e sarebbe difficile modificarlo per altri compiti... forse vorrebbe aggiungere il trailing

Motivazione: