[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 412

 
7777877:
Cioè il descrittore della finestra è semplicemente il numero ORDINE della finestra, a partire da 0 (finestra principale)?

No
 

Buongiorno a tutti! mentre scrivevo un waggle expert, stavo cercando dei punti di uscita più precisi e mi sono imbattuto in un incrocio tra RSI (8) e ADX(25). visivamente tutto va bene quando si fa trading manuale sulla demo.

Domanda come scrivere la condizione di incrocio RSI (8) con ADX(25) DI + per esempio se, RSI (8) ha un confine da 0 a 100, e ADX(25) non ha confine. cioè, se si getta ADX sul grafico senza confine e poi gettare RSI su di esso, poi RSI scala da max e min ADX. se ADX specificare confine da 0 a 100, poi ci sono molto pochi incroci chiari di ADX con RSI.

È possibile definire il valore di RSI quando è scalato da ADX.

 
PapaYozh:

No
????... se non ti dispiace, per favore dai una risposta più dettagliata... e sarebbe bello se poteste dare almeno un semplice script come esempio, che renda chiaro a cosa serve la funzione WindowHandle
 
drimara: Cioè, se si getta ADX sul grafico senza limiti specificati e poi si getta RSI su di esso, allora RSI scala da ADX max e min. se ADX è specificato con confini da 0 a 100, allora ci saranno pochissimi incroci evidenti tra ADX e RSI.

È possibile definire il valore di RSI quando è scalato da ADX.

E se poi lo sposti a sinistra e a destra, i punti di crossover cominceranno ad allontanarsi
 
C'è un limite al numero di parametri in un indicatore non standard, quando è collegato tramite iCustom?

Ho un indicatore con circa 8 parametri, ho inserito tutti i parametri correttamente, l'ho controllato diverse volte, ma alla compilazione appare ancora l'errore ')'. - conteggio parametri errato D:\InstaTrader\expert_2.mq4 (11, 280)
 
sss2019:
C'è un limite al numero di parametri in un indicatore non standard, quando è collegato tramite iCustom?

Ho un indicatore con circa 8 parametri, ho inserito tutti i parametri correttamente, l'ho controllato diverse volte, ma alla compilazione appare ancora l'errore ')'. - conteggio parametri errato D:\InstaTrader\expert_2.mq4 (11, 280)
Mostra il codice + i parametri di input nell'indicatore
 
7777877:
????... se non ti dispiace, per favore dai una risposta più dettagliata... e sarebbe bello se poteste dare almeno qualche semplice script come esempio, che aiuterebbe a capire a cosa serve la funzione WindowHandle


Al tuo attuale livello di conoscenza, non ne hai molto bisogno.

Se hai il desiderio di diventare un programmatore, allora mastica la scienza con l'aiuto di Google. Domanda "descrittore della finestra site:mql4.com"

 
Sto chiedendo ai guru della programmazione di dirmi sulla mia domanda, è anche realistico fare questo consigliere?
 
stater:
Chiedo al guru della programmazione di dirmi sulla mia domanda, è anche realistico fare questo consigliere?

Tutto è possibile, se si vuole che lo sia.

vedere le seguenti cose:

1) Controllo dell'apertura della barra

2) OrdineInvia

Prova e riprova, e i guru correggeranno

 

Ecco un EA per fare in modo che l'ordine si apra sulla CHIUSURA della candela, non solo su una croce.

Chi aiuterà in anticipo grazie.

//+------------------------------------------------------------------+

//| RSI_MA.mq4 |

//| Copyright © 2008, AEliseev k800elik@gmail.com |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2008, Andrey E. k800elik@gmail.com"

#proprietà link "http://www.metaquotes.net"


//---- parametri di ingresso

extern CCI_Per=14;

extern MA_Per=20;

extern CCI_close_Per=14;

extern double TakeProfit=500;

extern double StopLoss=150;

extern double Lots=0.01;

extern inttern Deposit=1000;

extern bool MM=false;

extern inttern _MagicNumber=13131313;

extern int_Sleep=5000;


int LotA=1, Err=0;

int j=0; var2,var1;

int counter=0;

biglietto int;

bool var3;


bool order=false;


//+------------------------------------------------------------------+

//| funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int init()

{

Comment("CCI_MA v1.5 © 2008, Andrey E. k800elik@gmail.com");

ritorno(0);

}

//+------------------------------------------------------------------+

//| funzione di deinizializzazione esperto |

//+------------------------------------------------------------------+

int deinit()

{

/* int i, a1, a2;

//----

se (Totale ordini()>0)

{

per (i=0; i==OrdiniTotali(); i++)

{

OrderSelect(i,SELECT_BY_POS);

se (OrderMagicNumber()==13131313)

{

a1=OrderClose(LotA*Lots,Ask,5,Red);

//a2=OrderClose(var1,LotA*Lots,Ask,5,Red);

}

}

} */

ritorno(0);

}

//+------------------------------------------------------------------+

//| funzione di inizio esperto |

//+------------------------------------------------------------------+

int start()

{

//----

se (isNewBar()) EveryBar();

EveryTick();

//----

ritorno(0);

}

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

//controllare la nuova barra

//+------------------------------------------------------------------+

bool isNewBar()

{ static datetime TimeBar=0;

bool flag=false;

if(TimeBar!=Time[0])

{

TimeBar=Time[0];

flag=true;

}

return(flag);

}

//+------------------------------------------------------------------+

//| Eseguire l'azione quando appare la nuova barra

//+------------------------------------------------------------------+

void OgniBarra()

{

// Stampa("È arrivato un nuovo bar!)

doppio MA[100], CCI[100], CCIclose[100], StandDevi[100];

int i,limit=ArraySize(CCI);

doppio SL, TP;

Dormire(_Sleep);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);

for(i=0; i<limite; i++)

{

CCI[i]=iCCI(NULL,0,CCI_Per,PRICE_CLOSE,i);

CCIclose[i]=iCCI(NULL,0,CCI_close_Per,PRICE_CLOSE,i);

MA[i]=iMAOnArray(CCI,0,MA_Per,0,MODE_SMA,i);

}

// controlla se c'è abbastanza denaro per aprire un nuovo ordine

se(AccountFreeMargin()<(1000*Lots))

{

Print("Non abbiamo soldi. Free Margin = ", AccountFreeMargin());

ritorno(0);

}

//=================================================================================

int _GetLastError = 0, _OrdersTotal = OrdersTotal();

//---- passare attraverso tutte le posizioni aperte

for ( int z = _OrdersTotal - 1; z >= 0; z -- )

{

//---- se si verifica un errore durante la selezione della posizione, continuare alla prossima

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print("OrderSelect( ",z, ", SELECT_BY_POS ) - Error #", _GetLastError);

continuare;

}

// se una posizione è aperta non per il simbolo corrente, è saltata

se ( OrderSymbol() != Symbol() ) continua;

// se il MagicNumber non è uguale a _MagicNumber, saltare

// questa posizione

se ( OrderMagicNumber() != _MagicNumber ) continua;

//---- se una posizione BAY è aperta,

se ( OrderType() == OP_BUY )

{

//---- se il CCI incrocia la linea 190 verso il basso

se (((CCIclose[2]>190) && (CCIclose[1]<=100)) || (CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>=MA[limit-MA_Per-2])

{

//---- posizione di chiusura

if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 10, Green ) )

{

_GetLastError = GetLastError();

Print("OrderClose error # , _GetLastError );

Err=1;

ritorno(-1);

}

}

// se il segnale non è cambiato, uscire - è troppo presto per aprire

//nuova posizione

else

{ return(0); }

}

//---- se viene aperta una posizione Sell,

se ( OrderType() == OP_SELL )

{

//---- se il CCI attraversa la linea -190 verso l'alto,

se (((CCIclose[2]<-190) && (CCIclose[1]>=-300)) || ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<=MA[limit-MA_Per-2])

{

//---- posizione di chiusura

if(!OrderClose( OrderTicket(), OrderLots(), Ask, 10, Red ) )

{

_GetLastError = GetLastError();

Print("OrderClose error # ", _GetLastError );

Err=2;

ritorno(-1);

}

}

// se il segnale non è cambiato, uscire - è troppo presto per aprire

// nuova posizione

altrimenti return(0);

}

}

//+------------------------------------------------------------------+

//| se l'esecuzione ha raggiunto questo punto, non c'è nessuna posizione aperta

//| controllare se è possibile aprire una posizione

//+------------------------------------------------------------------+

Dormire(_Sleep);

//---- se il CCI ha attraversato il MACD dal basso verso l'alto,

SL = NormalizeDouble(Bid - StopLoss*Point, Digits);

TP = NormalizeDouble(Bid + TakeProfit*Point, Digits);

se ((CCI[1]>MA[limite-MA_Per-1]) && (CCI[2]<MA[limite-MA_Per-2])

{

//---- posizione aperta BAY

if(OrderSend( Symbol(), OP_BUY, LotA*Lots, Ask, 5, SL, TP, "CCI_test_buy", _MagicNumber, 0, Green ) < 0 )

{

_GetLastError = GetLastError();

Print("OrderSend OP_BUY error # ", _GetLastError );

Err=3;

ritorno(-1);

}

ritorno(0);

}

//---- se il CCI ha attraversato il MACD dall'alto verso il basso,

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);

TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);

se ((CCI[1]<MA[limite-MA_Per-1]) && (CCI[2]>MA[limite-MA_Per-2])

{

//---- aprire una posizione di vendita

if(OrderSend( Symbol(), OP_SELL, LotA*Lots, Bid, 5, SL, TP, "CCI_test_close", _MagicNumber, 0, Red ) < 0 )

{

_GetLastError = GetLastError();

Print("OrderSend OP_SELL error # ", _GetLastError );

Err=4;

ritorno(-1);

}

ritorno(0);

}

}

//+------------------------------------------------------------------+

//| Eseguire i calcoli ad ogni cambiamento di prezzo.

//+------------------------------------------------------------------+

void EveryTick()

{

int i;

se (MM==true)

{

se (Saldo del conto()>(2*Deposito)) LottoA=2;

se (Saldo del conto()>(3*Deposito)) LottoA=3;

se (Saldo del conto()>(4*Deposito)) LottoA=4;

se (Saldo del conto()>(5*Deposito)) LottoA=5;

se (Saldo del conto()>(6*Deposito)) LotA=6; if (AccountBalance()>(6*Deposit); LotA=6;

se (Saldo del conto()>(7*Deposito)) LotA=7;

se (Saldo del conto()>(8*Deposito)) LottoA=8;

se (Saldo del conto()>(9*Deposito)) LottoA=9;

se (Saldo del conto()>(10*Deposito)) LotA=10;

se (Saldo del conto()>(11*Deposito)) LottoA=11;

se (Saldo del conto()>(12*Deposito)) LottoA=12;

se (Saldo del conto()>(13*Deposito)) LottoA=13;

se (Saldo del conto()>(14*Deposito)) LotA=14;

se (Saldo del conto()>(15*Deposito)) LotA=15;

se (Saldo del conto()>(16*Deposito)) LotA=16;

se (Saldo del conto()>(17*Deposito)) LotA=17;

se (Saldo del conto()>(18*Deposito)) LotA=18;

se (Saldo del conto()>(19*Deposito)) LotA=19;

se (Saldo del conto()>(20*Deposito)) LotA=20;

}

int _GetLastError = 0, _OrdersTotal = OrdersTotal();

int z;

doppio SL, TP;

doppio MA[100], CCI[100], CCIclose[100], StandDevi[100];

int limit=ArraySize(CCI);

for(i=0; i<limite; i++)

{

CCI[i]=iCCI(NULL,0,CCI_Per,PRICE_CLOSE,i);

CCIclose[i]=iCCI(NULL,0,CCI_close_Per,PRICE_CLOSE,i);

MA[i]=iMAOnArray(CCI,0,MA_Per,0,MODE_SMA,i);

}

interruttore(Err)

{

caso 1:

for ( z=_OrdersTotal - 1; z >= 0; z -- )

{

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print("OrderSelect( ",z, ", SELECT_BY_POS ) - Error #", _GetLastError);

continuare;

}

se ( OrderSymbol() != Symbol() ) continua;

se ( OrderMagicNumber() != _MagicNumber ) continua;

se ( OrderType() == OP_BUY )

{

se (((CCIclose[2]>300) && (CCIclose[1]<=300) || (CCI[1]<MA[limite-MA_Per-1]) && (CCI[2]>=MA[limite-MA_Per-2])

{

if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green ) )

{

_GetLastError = GetLastError();

Print("CASE OrderClose error # , _GetLastError );

Err=1;

ritorno(-1);

}

altrimenti Err=0;

}

}

}

pausa;

//=============================================================================

caso 2:

for ( z=_OrdersTotal - 1; z >= 0; z -- )

{

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print("OrderSelect( ",z, ", SELECT_BY_POS ) - Error #", _GetLastError);

continuare;

}

se ( OrderSymbol() != Symbol() ) continua;

se ( OrderMagicNumber() != _MagicNumber ) continua;

se ( OrderType() == OP_SELL )

{

se (((CCIclose[2]<-300) && (CCIclose[1]>=-300) || ((CCI[1]>MA[limite-MA_Per-1]) && (CCI[2]<=MA[limite-MA_Per-2])

{

if(!OrderClose( OrderTicket(), OrderLots(), Ask, 5, Red ) )

{

_GetLastError = GetLastError();

Print("CASE OrderClose error # ", _GetLastError );

Err=2;

ritorno(-1);

}

altrimenti Err=0;

}

}

}

pausa;

//==============================================================================

caso 3:

SL = NormalizeDouble(Bid - StopLoss*Point, Digits);

TP = NormalizeDouble(Bid + TakeProfit*Point, Digits);

if(OrderSend( Symbol(), OP_BUY, LotA*Lots, Ask, 7, SL, TP, "AI_test_buy", _MagicNumber, 0, Green ) < 0 )

{

_GetLastError = GetLastError();

Print("CASE OrderSend OP_BUY error # ", _GetLastError );

Err=3;

ritorno(-1);

}

altrimenti Err=0;

pausa;

//===================================================================================

caso 4:

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);

TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);

if(OrderSend( Symbol(), OP_SELL, LotA*Lots, Bid, 7, SL, TP, "AI_test_close", _MagicNumber, 0, Red ) < 0 )

{

_GetLastError = GetLastError();

Print("CASE OrderSend OP_SELL error # ", _GetLastError );

Err=4;

ritorno(-1);

}

altrimenti Err=0;

pausa;

}

}