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

 
yaaarik777:

Buona sera!

Per favore aiutatemi a scrivere il codice, non sento di poterlo fare da solo, ecco il succo:


La linea di fondo è questa: qui in questo thread per aiutare chi soffre e chi cerca.
Se avete bisogno di farlo per voi - questo è un freelance. E per aiutarvi a raccontare ciò che volete ottenere, mostrate ciò che avete fatto e descrivete ciò che non è riuscito.
 
Maxim Kuznetsov:
Il punto è questo: qui in questo thread per aiutare chi soffre e chi cerca.
Se hai bisogno di farlo per te - questo è nel freelance. E per ottenere aiuto, devi dire cosa vuoi ottenere, mostrare cosa stai facendo e descrivere cosa non ha funzionato.


Il punto è che non capisco come fare in modo che l'EA analizzi solo gli ordini di una particolare coppia e non gli ordini di tutte le coppie nel terminale.

Se puoi, per favore dammi un'idea o un esempio di codice, poiché i libri di testo descrivono separatamente cosa funziona e come funziona, ma non ci sono molti esempi concreti.

Vi sarei grato per il vostro aiuto.

Grazie.

 
Salve.
È passato molto tempo da quando ho preso in mano la dama, e quando l'ho fatto, è venuto fuori

Non so giocare.
Sto chiedendo aiuto.
C'è un buon vecchio EA che usa l'indicatore ZigZag di Rosh
E funziona bene come orologio svizzero.
Ha allegato il codice per non scaricare l'expert advisor dato in fondo al testo.

L'idea dell'EA era che gli ordini sono aperti e chiusi al momento di

coincidenza di diversi ZigZag.
Ora ho bisogno di sostituire l'indicatore Rosh con un altro

indicatore, anche una delle prime versioni di ZigZag dal tempo di MT3.
Ma questo indicatore ha un diverso algoritmo di disegno a ZigZag.

Il suo nome è High_Low v2 (ZigZag), (nell'allegato del perché il nome glitched)

Con il metodo dell'istinto, che a volte ha funzionato, ho semplicemente cambiato le condizioni
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0);
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0);
su
double zz1 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0);

double zz2 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0);

Cioè, ho sostituito il nome di un indicatore personalizzato e il suo

Nel caso dei frattali, per esempio, ha funzionato per me.

.
I parametri sono gli stessi, perché non è necessario che due Zigzag siano uguali.

Non ho bisogno della coincidenza di Zigzags, ho bisogno solo del fatto della sua variazione.
Ho sostituito il numero 60 con 0 per lavorare in tutti i TF.

Dopo la sostituzione, l'EA ha compilato senza errori, ma si rifiuta fortemente di funzionare quando è collegato a

Inoltre, si rifiuta di funzionare nello Strategy Tester.

non vuole lavorare.

La domanda è: cosa c'è che non va?
E un'altra domanda: qual è il modo giusto per farlo?
Grazie, scusate per il testo grande.


//+------------------------------------------------------------------+
//| ZZ.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"

#include <stdlib.mqh>

#define MAGIC 20110220

extern double TakeProfit = 50;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| Calcolare le posizioni aperte
//+------------------------------------------------------------------+
int CalcolaOrdiniCorrenti(simbolo stringa)
{
int pos=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL) pos++;
}
}
//---- volume degli ordini di ritorno
se(pos>0) ritorno(pos)
}
//+------------------------------------------------------------------+
//controllare le condizioni di ordine aperto
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res;

//---- ottenere ZZ
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0);
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0);
//---- condizioni di acquisto
if(CompareDoubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])
{

res=OrderSend(Symbol(),OP_BUY,1,Ask,3,0,Ask+TakeProfit*Point,"",MAGIC,0,Bl

ue);
ritorno;
}
//---- condizioni di vendita
if(CompareDoubles(zz1,High[0]) && CompareDoubles(zz2,High[0])
{

res=OrderSend(Symbol(),OP_SELL,1,Bid,3,0,Bid-TakeProfit*Point,"",MAGIC,0,Re

d);
ritorno;
}

//----
}
//+------------------------------------------------------------------+
//| Controlla le condizioni di chiusura dell'ordine
//+------------------------------------------------------------------+
void CheckForClose()
{
//---- ottenere ZZ
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0);
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continua;
//---- controllare il tipo di ordine
if(OrderType()==OP_BUY)
{
if(CompareDoubles(zz1,High[0]) && CompareDoubles(zz2,High[0])

OrderClose(OrderTicket(),OrderLots(),Bid,3);
pausa;
}
if(OrderType()==OP_SELL)
{
if(CompareDoubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
pausa;
}
}
//----
}
//+------------------------------------------------------------------+
//| Iniziare la funzione |
//+------------------------------------------------------------------+
void start()
{
//---- controllare la storia e il commercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcolare gli ordini aperti in base al simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}
//+------------------------------------------------------------------+













MetaQuotes Software Corp.
MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 - это бесплатный инструмент трейдера, позволяющий торговать на форексе и фондовых биржах.
File:
 
yaaarik777:


Il punto è che non capisco come fare in modo che l'EA conti solo gli ordini di una particolare coppia e non il totale di tutte le coppie nel terminale.

Non capisco come fare in modo che un EA calcoli solo gli ordini di una coppia particolare, e non la somma di tutte le coppie nel terminale.

Sarò molto grato per l'aiuto.

Lo apprezzerei molto.

Sentitevi liberi di guardare nel CodeBase - ogni EA ha un ciclo d'ordine :-)

Per esempio https://www.mql5.com/ru/code/16588 (il primo che ho incontrato)

  for(int index = orders-1; index >= 0; index--)
      {
      if(OrderSelect(index,SELECT_BY_POS,MODE_HISTORY)==false)
         {
         Print("Error in history!");
         break;
         }
      if(OrderSymbol()==symbol && OrderMagicNumber()==MAGICMA)
         {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
            {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0) losses++;
            }
         }
      }

la condizione"if(OrderSymbol()==simbolo && OrderMagicNumber()==MAGICMA)" è esattamente ciò che seleziona gli ordini da un simbolo specifico e con un MAGIC specifico

PS/ nel codice copia-incolla di cui sopra rompere in caso di un errore di OrderSelect non è del tutto corretto, piuttosto usate continue (non importa quale sia la ragione per cui l'ordine non viene scelto, forse c'è un problema con qualche meccanismo interno di MetaTrader, ma l'ordine successivo non verrà saltato)

Middle Moving Average
Middle Moving Average
  • voti: 6
  • 2016.10.18
  • Dmitriy Kudryashov
  • www.mql5.com
Вариант советника, основанного на среднем значении цены для расчета Moving Average.
 
Maxim Kuznetsov:

Sentitevi liberi di guardare nel CodeBase - ogni EA ha un ciclo d'ordine :-)

Per esempio https://www.mql5.com/ru/code/16588 (il primo che ho incontrato)

Non solo è in CodeBase, è in uno dei due thread del forum, l'importante è iniziare a cercare e ce ne saranno più di cento in diverse interpretazioni.
 
Grazie, lo visiterò
 

Ciao ragazzi!!! aiutatemi a scrivere una funzione che restituisca un segnale di acquisto o di vendita. Non so ancora come lavorare con le barre in MQL (anche se non so molte cose!).

La condizione è la seguente: la barra madre è una barra all'interno della quale, cioè, all'interno del massimo e del minimo c'è una barra con il prezzo di chiusura (è importante!!! esattamente il prezzo di chiusura.) Una volta che qualche barra buca quella madre e chiude sopra il massimo o sotto il minimo, diventa ora la barra madre!

Se il prezzo di chiusura della barra madre è superiore al prezzo di apertura, restituiamo il segnale di acquisto.

Se il prezzo di chiusura della barra madre è inferiore al prezzo di apertura, restituiamo il segnale di vendita.

È molto importante impostare l'intervallo di tempo nella variabile esterna.

Ma ecco il problema, almeno per me, come può l'Expert Advisor trovare l'ultima barra opaca sul grafico? Sì, visivamente lo vedo subito! ....

Sarebbe conveniente per me specificare l'indice dell'ultima barra MAT in una variabile esterna e poi la funzione inizierà a ballare da essa; o un'altra variante per prendere una barra con l'indice, per esempio, 50 e passare attraverso il ciclo a zero.

Molto per favore aiutate l'orfano!!!

 

Buon pomeriggio!

Puoi darmi un'idea? Abbiamo bisogno che un EA non possa aprire un ordine se un ordine è già stato aperto a questo prezzo. Come implementare il controllo?

 
Kot:

Buon pomeriggio!

Puoi darmi un'idea? Abbiamo bisogno che un EA non possa aprire un ordine se un ordine è già stato aperto a questo prezzo. Come implementare il controllo?

Questo è un compito difficile. Per disperazione, assegnavo un ordine magico al_prezzo/punto desiderato dato lo slittamento.

È molto più semplice in mql5: c'è una posizione con un prezzo che non corrisponde al prezzo richiesto e un ordine con il prezzo richiesto.

 
Kot:

Buon pomeriggio!

Puoi darmi un'idea? Abbiamo bisogno che un EA non possa aprire un ordine se un ordine è già stato aperto a questo prezzo. Come implementare il controllo?


Si scrive un ciclo di ordini, in cui si confronta il prezzo di apertura di ogni ordine con il valore di prezzo dato, e se c'è una corrispondenza, allora il flag di un nuovo ordine non viene sollevato.
Motivazione: