[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 412
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
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.
No
È possibile definire il valore di RSI quando è scalato da ADX.
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)
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)
????... 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"
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;
}
}