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

 

Dratuti. Come si fa un pannello come questo?

 
Andrey Sokolov:

Dratuti. Come si fa un pannello come questo?

Prendete l'esempio di kodobase e rifatelo, ci sono molti consulenti con pannelli per tutti i gusti. Si inizia con lo sfondo
 
Andrey Sokolov:

Dratuti. Come si fa un pannello come questo?

Con oggetti grafici.
 
Andrey Sokolov:
Vitaly Muzichenko,Artyom Trishkin grazie.
Nzt
 
trader781:

Continuando a scrivere un altro piggybacking su martingala, perdendo anche nel tester, altrimenti come facciamo a crescere un alce.

Al momento c'è un parametro desiderato, che dovrebbe essere responsabile della possibilità di aprire l'ordine successivo dopo che il precedente è chiuso

ci sono 2 scenari

1) se il valore è vero

aprire l'ordine

processo

chiudere

e riaprire

2) se falso

Aprire l'ordine

Processo

Chiudere

e poi fare ExpertRemove

l'intero problema è che queste due condizioni si escludono a vicenda, ma devono essere combinate in 1 EA poiché

1) il valore è impostato all'inizio

2) il valore è impostato nelle condizioni di input e di elaborazione e accettato per l'elaborazione (se vero, aperto)

3) dopo la chiusura, impostiamo false

Se qualcuno è interessato a queste cose, sarei felice di sentire le mie varianti.
Ho problemi con la logica.

È semplice:

  1. aprire un ordine
  2. elaborare l'ordine
  3. chiudere l'ordine
  4. Controllare la condizione e...
    • se vero, allora ExpertRemove()
  5. Ancora
 
Artyom Trishkin:
Abbiamo problemi con la logica.

Tutto è semplice:

  1. aprire un ordine
  2. elaborare l'ordine
  3. chiudere l'ordine
  4. controllare la condizione e...
    • se vero, allora ExpertRemove()
  5. e farlo di nuovo
Qualcosa sembra sbagliato, se è vero - bisogna tagliare un cavolo, non andare ai cespugli)
 
Vitaly Muzichenko:
Qualcosa non sembra giusto, se è vero - dovresti tagliare i cavoli, non nei cespugli)
Sbagliato. Falso. Non so quale sia il test... Cazzo, c'è ancora un po' di logica.
O vuoi solo chiacchierare?
 

Si prega di avvisare. L'Expert Advisor non apre ordini nel terminale. La compilazione è in corso, secondo i grafici gli ordini dovrebbero essere aperti. Ma non lo sono. Sto allegando il codice.

double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//determina il numero di lotti
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);//i parametri MACD della barra corrente
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);//i parametri MACD della barra precedente
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);//i parametri MACD della linea principale spostati di 2 barre
double StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//Parametri Trailing Stop da parametri ParabolicSAR della barra corrente
double Previous_StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);/parametri StopLoss per parametri ParabolicSAR della barra precedente
double PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//parametri ParabolicSAR della barra corrente
double PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//ParabolicSAR parametri della barra precedente
//+------------------------------------------------------------------+
//| Funzione tick esperto|
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// Tempo della barra corrente
bool New_Bar=false; // Flag nuova barra
int biglietto,totale,cnt;
//---------------------------------------------------------------------------
{
New_Bar=false; // Nessuna nuova barra
if(Time[0]==New_Time) // Confronta i tempi
{
New_Bar=true; // New_Bar è catturato
if(New_Bar==false) // Se una barra non è nuova
return; // ...poi uscire
}
}
total=OrdersTotal();// Determinazione del numero di ordini
se(totale<1)
{
//---nessun ordine aperto
if((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))
//Controlla la disponibilità di fondi per aprire il lotto minimo
{
Print("Non ci sono abbastanza fondi. Fondi liberi = ",AccountFreeMargin());
ritorno;
}

//-condizione per l'apertura di una posizione lunga (BUY)
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//controlla la posizione aperta
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order open : ",OrderOpenPrice());
else
Print("BUY order open error : ",GetLastError());
ritorno;
}
}

//-condizione per aprire una posizione corta (SELL)
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//controlla la posizione aperta
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order open : ",OrderOpenPrice());
else
Print("Error opening SELL order : ",GetLastError());
ritorno;
}
}
//- uscire dal blocco "nessun ordine aperto"

}
//--è importante entrare nel mercato correttamente ma è più importante uscirne correttamente
for(cnt=0;cnt<totale;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICNUMBER && // controlla il numero magico dell'ordine
OrderSymbol()==Symbol()) // controlla il simbolo dell'ordine
{
//--- posizione lunga aperta
if(OrderType()==OP_BUY)
{
//--- deve essere chiuso?
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
//- ordine di chiusura e uscita
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
ritorno;
}
//------------------Modificare l'ordine per StopLoss
if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Errore di modifica dell' ordine. Codice di errore=",GetLastError());
else
Stampa("Il prezzo di Stop Loss dell'ordine è stato modificato con successo;)
ritorno;
}
}

altrimenti // vai corto
if(OrderType()==OP_SELL)
{
//--- deve essere chiuso?
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
//- ordine di chiusura e uscita
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
ritorno;
}
//-----------------Modificare l'ordine per StopLoss
if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Errore di modifica dell'ordine. Codice di errore=",GetLastError());
else
Stampa("Il prezzo di Stop Loss dell'ordine è stato modificato con successo;)
ritorno;
}
}
}

//-------------------------------------------------------------------------------------------------------

 
trader781:

Sì, è più semplice di così.

ma cosa succede se teniamo questo come ripiego e facciamo quanto segue

controllare la condizione e...
  • se vero, allora il bot si blocca con attività minima, preferibilmente nessuna

cioè come bloccare l'ingresso per ulteriori operazioni

return(0); ma questo non è desiderabile - non gestirà nient'altro.