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

 

Buon pomeriggio, signori).

Cercare di preparare i dati per l'addestramento di una rete neurale. Il compito è.

Avere una matrice, dove per esempio ogni riga (momento temporale - barra) è un vettore di input, e le colonne per esempio 10000. Cosa fare se ci sono dati dinamici (numero di righe1, righe2), e cambiare il numero in diversi punti nel tempo.

Per esempio, una matrice è caricata in una rete, ogni riga è un vettore di apprendimento, ma per ogni riga, c'è n numero di righe che cambia dinamicamente nel tempo.

Una possibile soluzione congetturale è quella di aggiungere colonne addizionali alla matrice pari al numero di colonne della riga dinamica, si scopre che ogni vettore avrà colonne dalla denamica, ma come se di una riga, appena prosunta.

per esempio

1° vettore

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "linea1 dinamica" 1 1 1 1 1 1

ssssssssssssssssssssssssssss "line2 dynamic" 1 1 1 1 1

soluzione

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "linea1 dinamica" 2 2 2 2 2 2

 
Top2n:

Buon pomeriggio, signori).

Cercare di preparare i dati per l'addestramento di una rete neurale. Il compito è.

Avere una matrice, dove per esempio ogni riga (momento temporale - barra) è un vettore di input, e le colonne per esempio 10000. Cosa fare se ci sono dati dinamici (numero di righe1, righe2), e cambiare il numero in diversi punti nel tempo.

Per esempio, una matrice è caricata in una rete, ogni riga è un vettore di apprendimento, ma per ogni riga, c'è n numero di righe che cambia dinamicamente nel tempo.

Una possibile soluzione congetturale è quella di aggiungere colonne addizionali alla matrice pari al numero di colonne della riga dinamica, si scopre che ogni vettore avrà le colonne della denamica, ma come se di una riga, appena prosunta.

per esempio

1° vettore

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "linea1 dinamica" 1 1 1 1 1 1

ssssssssssssssssssssssssssss "line2 dynamic" 1 1 1 1 1

soluzione

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "linea1 dinamica" 2 2 2 2 2 2

E come si impara una lingua che cambia dinamicamente (una volta all'ora, diciamo) il suo vocabolario? Ecco come fa una rete neurale.
 
Quindi c'è MQL5, come ho capito. O è identico?
 
Andrey Sokolov:
Quindi c'è MQL5, come ho capito. O è identico?
Esattamente lo stesso.
 
Buon pomeriggio. Ho creato un EA, funziona bene, ma se spengo il terminale con l'EA in esecuzione e riaccendo il terminale, l'EA inizia a contare di nuovo. Allora, ho una domanda. Cosa devo scrivere nel mio EA, in modo che resetti i parametri di ingresso all'avvio?
 
XFaost:
Buon pomeriggio. Ho creato un EA, funziona bene, ma se spengo il terminale con l'EA in esecuzione e riaccendo il terminale, l'EA inizia a contare di nuovo. Allora, ho una domanda. Cosa devo prescrivere nell'EA, in modo che resetti i parametri di ingresso quando parte?
Voglio che il mio Expert Advisor non azzeri i parametri di input, ma che raccolga informazioni sugli ordini che sono stati aperti prima della sua chiusura.
 
XFaost:
Buon pomeriggio. Ho creato un EA, funziona bene, ma se spengo il terminale con l'EA in esecuzione e riaccendo il terminale, l'EA inizia a contare di nuovo. Allora, ho una domanda. Cosa devo scrivere nel mio EA, in modo che resetti i parametri di ingresso quando lo avvio?
Si prega di descrivere il modo in cui funziona l'EA. Forse dovete usare un principio diverso. E se avete ancora bisogno di resettare, allora dovreste prima definire cosa si intende per "all'inizio". E in generale, un reset è una transizione alla posizione iniziale. Scrivete le impostazioni iniziali e impostatele al momento giusto.
 

Saluti. Puoi dirmi cosa c'è che non va?

L'EA piazza ordini con stop sopra e sotto il prezzo. Se uno di essi scatta, lo stop viene regolato se il prezzo si allontana dallo stop più di quanto impostato, se il prezzo si muove verso lo stop allora nessun cambiamento.

All'inizio ho scritto solo Buy order e ha funzionato come previsto. Se aggiungo un'immagine speculare per vendere, gli stop saranno corretti dal valore impostato qualunque sia il movimento del prezzo.

In generale, se separatamente, o per comprare o per vendere - tutto funziona come dovrebbe, ma entrambe le parti insieme - c'è un bug.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot             = 0.01;
extern int    StopLoss        = 50;
extern int    Slippage        = 5;
extern int    Delta           = 60;
extern int    Delta2          = 170;
extern int    Magic           = 321;

int ticket;
double price, sl, sl2;
datetime counted_bar = 0;

int OnInit()
  {
    if (Digits == 3 || Digits == 5)
   {

       StopLoss      *= 10;
       Delta         *= 10;
       Delta2        *= 10;
      
   }

  
   return(INIT_SUCCEEDED);
  }


void OnTick() {
//////        ПРОДАЖА  ///////////////////////////////////////////////////////
if (SellLimitCount()==0 && SellCount()==0)
{    
  price = NormalizeDouble(Bid - Delta*Point, Digits);
  sl = NormalizeDouble(price + StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_SELLSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Red);
}

if (SellCount()!=0)
  {
   if (Bid < (OrderStopLoss() - NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Bid + StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Red)) Print ("Sell_Order_Modify_Ok");
     else Print ("ERROR_Sell_Order_Modify");
     }  
  }
if (SellLimitCount()!=0)
{
  if(Bid > (OrderOpenPrice() + NormalizeDouble (Delta2*Point, Digits)))
   {    
    if (OrderDelete(ticket, Red)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Odrer_Delete");
   }  
}
/////////////////////////////////////////////////////////////////////////////////
///////       ПОКУПКА ////////////////////////////////////////////////////////
if (BuyLimitCount()==0 && BuyCount()==0)
{
  price = NormalizeDouble(Ask + Delta*Point, Digits);
  sl = NormalizeDouble(price - StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_BUYSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Blue);
}

if (BuyCount()!=0)
  {
    if (Ask > (OrderStopLoss() + NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Ask - StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Blue)) Print ("Buy_Order_Modify_Ok");
     else Print ("ERROR_Buy_Order_Modify");
     }  
  }
if (BuyLimitCount()!=0)
{
  if(Ask < (OrderOpenPrice() - NormalizeDouble (Delta2*Point, Digits)))
   {
    if (OrderDelete(ticket, Blue)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Orde_Delete");
   }  
}
///////////////////////////////////////////////////////////////////////////////

}
//+------------------------------------------------------------------+
int BuyLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUYSTOP)
count++;}}}return(count);}

int BuyCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUY)
count++;}}}return(count);}

int SellLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELLSTOP)
count++;}}}return(count);}

int SellCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELL)
count++;}}}return(count);}
 
Andrey Sokolov:

Saluti. Puoi dirmi cosa c'è che non va?

L'EA piazza ordini con stop sopra e sotto il prezzo. Se uno di essi scatta, lo stop viene regolato se il prezzo si allontana dallo stop più di quanto impostato, se il prezzo si muove verso lo stop allora nessun cambiamento.

All'inizio ho scritto solo Buy order e ha funzionato come previsto. Se aggiungo un'immagine speculare per vendere, gli stop saranno corretti dal valore impostato qualunque sia il movimento del prezzo.

In generale, se separatamente, o per comprare o per vendere, tutto funziona come dovrebbe essere, ma entrambe le parti insieme - c'è un bug.

...

L'intero codice che ci ha mostrato è un bug, vero? Almeno, la funzione OnTick è quasi interamente un bug...

 
Vitalie Postolache:

Un bug, intendi l'intero codice mostrato?

Quando ci sono entrambe le parti del codice, sia per comprare che per vendere, allora dopo che l'ordine pendente scatta, il suo stop viene corretto in qualsiasi direzione di prezzo per qualche motivo. E quando c'è solo una parte di codice Buy o Sell, lo stop viene corretto come previsto, solo quando il prezzo si allontana da esso.