Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 97
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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
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
https://www.mql5.com/ru/articles/159
Quindi c'è MQL5, come ho capito. O è identico?
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?
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?
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 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);}
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...
Un bug, intendi l'intero codice mostrato?