Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 982
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
Ieri ho scritto il codice, sembra funzionare come dovrebbe, ma solo quando arrivo al valore superiore dell'array con il pulsante più, si resetta all'inizio dell'array e si sposta di nuovo su per l'array. Cosa posso aggiungere o correggere nel codice, in modo che quando raggiunge il valore superiore dell'array, ulteriori clic sul pulsante più si fermino all'indice superiore e non si resettino al fondo dell'array? O il codice può essere semplificato in qualche altro modo per implementare l'idea del clic del pulsante?
Probabilmente è così.
Credo di sì.
Provato anche questo, funziona allo stesso modo
Provato anche questo, funziona allo stesso modo
Non l'ho notato subito, a cosa serve il ciclo?
Non l'ho notato subito, ma a cosa serve il loop?
C'è un modo per farlo senza? Non so cosa sia meglio e faccio solo quello che penso sia logico.
C'è un modo per farlo senza? Non so cosa sia meglio e faccio quello che penso sia logico.
Beh, la logica deve essere diversa. Premendo il pulsante + si aumenta l'indice della matrice. Raggiunto il massimo, non aumenta, ma rimane al massimo. Premuto il pulsante - l'indice è diminuito. Raggiunto lo zero, non reagisce alla pressione, rimane sull'indice 0.
O c'era qualche altra idea?
PS; E chi ha postato l'esempio di lavoro con le bandiere, in risposta a questa domanda e l'ha cancellato? Perché l'hai cancellato? Dopo tutto, è un'ottima soluzione per l'uomo. Perché avrebbe bisogno di una serie limitata?Beh, la logica deve essere diversa. Premendo il pulsante + si aumenta l'indice della matrice. Raggiunto il massimo, non aumenta, ma rimane al massimo. Premuto il pulsante - l'indice è diminuito. Raggiunto lo zero, non risponde, rimane all'indice 0.
O c'era qualche altra idea?
PS; E chi ha postato l'esempio di lavoro con le bandiere, in risposta a questa domanda e l'ha cancellato? Perché l'hai cancellato? Dopo tutto, è un'ottima soluzione per l'uomo. Perché avrebbe bisogno di una serie limitata?No, l'idea era proprio quella. Non so davvero come farlo correttamente, quindi l'ho fatto come l'ho ottenuto. Ma ho notato che quando il ciclo è in esecuzione nel programma, finché non clicco i pulsanti sul grafico, tutto il resto non funziona. È come se tutto fosse in pausa. Non capisco perché questo accade, se ci sono delle varianti per implementare l'idea in qualche altro modo, ne sarei grato...
Questo è tutto. Il problema è risolto) senza array e altre cose. Si è rivelato molto più semplice))))
La seconda domanda è venuta fuori. Come posso impostare il livello di attivazione di Alert nel codice con la freccia di impostazione che appare quando Alert è impostato tramite il menu contestuale con il mouse?
Per favore aiuto, plz, è possibile aggiungere una funzione a questo EA, in modo che l'EA impostato nella finestra EURUSD aprirà un accordo con gli stessi parametri, allo stesso tempo, ma per GBPUSD, e EURUSD non si aprirà.
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Sviluppatore: Minaev Andrey |
//| Expert Advisor: Stocastico.mq4 |
|| Sito web: safe-forex.|| Sito web: safe-forex. |
//| Mail:minaev.work@mail.ru |
//| Skype: live:minaev.lavoro |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
#proprietà copyright "Safe-Forex.ru"
#proprietà link "https://safe-forex.ru"
#proprietà rigorosa
extern bool Use_Symbol1 = true;
extern string Symbol1 = "USDJPY";
input string settings = ""; // impostazioni di Expert Advisor
input int magic = 111; // input magic
input double fixVolume = 0.01; // Volume
input int takeProfit = 500; // Profitto
input int stopLoss = 500; //Loss
input int buyLevel = 100; // input int buy Level
input int sellLevel = 0; // 75 Sell Level
extern int ADXperiod = 15; //ADX period 15
extern int ADXLevel =1;
extern int MAperiod =360; //periodo MA 80
extern int MAperiod_2 =360; //periodo MA 80
input string stochSettings = ""; // impostazioni dell'indicatore Stochastic Oscillator
input int stochPeriodK = 5; //periodo %K
input int stochPeriodD = 3; //periodo %D
input int stochSlowing = 3; // rallentamento
input ENUM_STO_PRICE stochPrice = STO_LOWHIGH; // Prezzo
input ENUM_MA_METHOD stochMethod = MODE_SMA; // Metodo
datetime newCandle; // nuova candela sul grafico corrente
bool allowOpenBuy; // permesso di aprire la posizione Buy
allowOpenSell; // permesso di aprire la posizione Sell
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit(void)
{
ritorno INIT_SUCCEED;
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OnTick(void)
{
if(newCandle!=Time[0]) CheckSignalExist(); newCandle=Time[0];
if(allowOpenBuy) OpenPosition(OP_BUY);
se(allowOpenSell) OpenPosition(OP_SELL);
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La funzione apre la posizione al prezzo corrente |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OpenPosition(int type)
{
doppio prezzo=0,0;
if(type==OP_BUY) price=Ask;
if(type==OP_SELL) price=Bid;
int ticket=OrderSend(_Symbol,type,fixVolume,price,0,0,",magic,0);
// int ticket=OrderSend(,type,fixVolume,price,0,0,0,",magic,0);
Dormire(1000);
se(biglietto>0)
{
se(tipo==OP_BUY)
{
Print("Posizione di acquisto aperta, biglietto: ",biglietto);
allowOpenBuy=false;
// SetStopOrders(ticket);
}
se(tipo==OP_SELL)
{
Print("Posizione di vendita aperta, biglietto: ",biglietto);
allowOpenSell=false;
// SetStopOrders(ticket);
}
}
se(biglietto<0)
{
if(type==OP_BUY) Print("Buy position did not open, error: ",GetLastError());
if(type==OP_SELL) Print("Sell position didn't open, error: ",GetLastError());
}
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La funzione imposta l'ordine di stop |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//evitare SetStopOrders(int ticket)
//{
// double stopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL),
// spread =MarketInfo(_Symbol,MODE_SPREAD),
// tp =takeProfit,
// sl =stopLoss;
// stopLevel+=spread;
// se(tp<stopLevel)
// {
// tp=stopLevel;
// Print("Distanza minima per set di profitti");
// }
// se(sl<stopLevel)
// {
// sl=stopLevel;
// Print("Distanza minima per l'insieme delle perdite");
// }
// if(OrderSelect(ticket,SELECT_BY_TICKET))
// {
// int type=OrderType();
// double opp =OrderOpenPrice();
// if(type==OP_BUY) {tp=opp+tp*_Point; sl=opp-sl*_Point;}
// if(type==OP_SELL) {tp=topp-tp*_Point; sl=opp+sl*_Point;}
// if(OrderModify(ticket,opp,sl,tp,0))
// {
// if(type==OP_BUY) Print("P&L levels set for Buy position, ticket: ",ticket);
// if(type==OP_SELL) Print("I livelli P&L per la posizione Sell sono stati impostati, ticket: ",ticket);
// }
// else {
// if(type==OP_BUY) Print("I livelli P&L per la posizione Buy non sono stati impostati, ticket: ",ticket," error: ",GetLastError());
// if(type==OP_SELL) Print("I livelli P&L per la posizione Sell non sono stati impostati; ticket: ",ticket," error: ",GetLastError();
// }
// }
//}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La funzione controlla la presenza del segnale |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void CheckSignalExist(void)
{
double ADX1=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,1); ////////////////////////////
double ADX2=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,2);
double DPLUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_PLUSDI,1);
double DMINUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_MINUSDI,1);
double MA=iMA(Symbol(),Period(),MAperiod,0,MODE_SMA,0,1);
double MA_2=iMA(Symbol(),Period(),MAperiod_2,0,MODE_SMA,0,1);
//PERIODO_H1
double mainLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,1),
mainLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,2),
signLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,1),
signLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,2);
Comment(" ", (Ask-Bid)/1.5," ",Bid-Close[1]," ", Ask-Close[1]);
// if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//& iClose(Symbol(),Period(),1)>MA& iClose(Symbol(),Period(),1)>MA_2 && signLine1<buyLevel && signLine2<buyLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//&Close[2]<MA& Close[2]<MA_2 && signLine1<buyLevel && signLine2<buyLevel
&&Close[10] > Close[1]-(Close[1]-Close[20])
&& Close[10]>Bid )
{
Print("È apparso un segnale per aprire una posizione di acquisto");
se(GetPositionsNumber()==0)
{
// allowOpenSell=true;
{ allowOpenBuy=true;
Dormire(1000);
Print("Permesso di aprire posizione di acquisto");
}
}
// if(mainLine1<signLine1 && mainLine2>signLine2 && mainLine1>sellLevel && ADX1>ADXLevel&& mainLine2>sellLevel
//& iClose(Symbol(),Period(),1)<MA& iClose(Symbol(),Period(),1)<MA_2 && signLine1>sellLevel && signLine2>sellLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//&Close[2]>MA& Close[2]>MA_2 && signLine1<buyLevel && signLine2<buyLevel
&&Close[10] < Close[1]+(Close[20]-Close[1])
&& Close[10]<Ask )
{
Print("È apparso un segnale per aprire una posizione di vendita");
se(GetPositionsNumber()==0)
{
// allowOpenBuy=true;
allowOpenSell=true;
Dormire(1000);
Print("Permesso di aprire la posizione Sell");
}
}
}
/////////////////////////////////////////
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La funzione restituisce il numero di posizioni aperte |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
int GetPositionsNumber(void)
{
int numero=0;
for(int i=0; i<OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==magico)
numero++;
numero di ritorno;
}
//+---------------------------------------------------------------------------------------------------------------------------------
Aiuto, plz, è possibile aggiungere una funzione a questo EA, in modo che l'EA installato nella finestra EURUSD apra un trade con gli stessi parametri di apertura, allo stesso tempo, ma su GBPUSD, e EURUSD non si apre.
Mi scusi, la sua testa è a posto? Non solo hai inserito il codice in un posto, ma hai anche lasciato un'enorme quantità di linee vuote.
Non pensi che dovresti avere un po' di rispetto per chi stai chiedendo aiuto?