Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 23
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
Sono completamente confuso.
double blevel=OrderStopLoss()<Bid-Point*TS; funziona per me. SL insegue il prezzo solo in profitto.
double slevel=OrderStopLoss()>Ask+Point*TS; Non so come aggiungere questo a else
Non è un bool.
Non è un bool, ma si chiama conversione implicita
Cosa stai facendo comunque? Reti a strascico?
Non è un bool, ma si chiama conversione implicita
Cosa stai facendo comunque? Reti a strascico?
Sì, ho provato a fare un trawl. lo script originale era solo per chiudere quando il profitto sull'ordine veniva raggiunto
Sì, ho provato a fare un trawl. lo scrip originale era solo per chiuderlo quando raggiungeva il profitto su un ordine
Logica:
Se il profitto dell'ordine corrente selezionato nel ciclo è maggiore del valore impostato, se il suo stoploss è inferiore (per Comprare)/superiore (per Vendere) al livello di strascico dello stoploss calcolato, allora sposta lo stop al nuovo valore.
Questo è in poche parole.
Non è quello che ho suggerito?
Sì, beh... Ho guardato il tuo codice così distrattamente che è meglio dire che non l'ho guardato affatto. Ma questa è la metà del problema, poi ho detto delle sciocchezze che quasi mi vergogno. Per qualche ragione ho improvvisamente avuto questa folle idea che ArrayMaximum() potesse essere applicato a un array di strutture o anche a un campo separato di questo array.
Mi pento, non consiglio a nessun altro di pensarla così, non funziona...:)
Sì, beh... Ho guardato il tuo codice così distrattamente che è meglio dire che non l'ho guardato affatto. Ma questo è la metà del problema, poi ho detto delle sciocchezze che quasi mi vergogno. Per qualche ragione ho improvvisamente avuto questa pazza idea che ArrayMaximum() potesse essere applicato ad un array di strutture o anche ad un campo separato di questo array.
Mi pento, non consiglio a nessun altro di pensare così, non funziona...:)
Bene... E io? Ho guardato il tuo codice allo stesso modo e ti ho ringraziato - era davvero più corto...
In breve - entrambi valgono una battuta...
Non uno script, un Expert Advisor. State confondendo i tipi di programmi. Lo script viene eseguito una volta dopo essere stato caricato sul grafico e poi cancellato. Se non è in loop. Quasi nessuno farà uno script in loop per chiudere le posizioni.
secondo l'autore:
Ecco uno script standard MT4 close.mq4 leggermente modificatoMettete il file nella cartella MetaTrader\experts\Scripts,
Bene... E io? Appena ho dato un'occhiata al tuo codice, mi sono inchinato in segno di gratitudine - è davvero più corto...
In breve - entrambi valgono una battuta...
No, non sono d'accordo. Questo codice
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
testato e funziona. Ci sono semplici matrici doppie definite dall'utente, e CopyRates() riempie una matrice di strutture e quindi non si può scegliere il massimo e il minimo usando funzioni di lavoro con matrici.
secondo l'autore:
Ecco uno script standard MT4 close.mq4 leggermente modificatoMettete il file nella cartella MetaTrader\experts\Scripts,
Quindi il suo script funziona solo una volta - l'ho messo sul grafico, lo script ha funzionato(posizioni chiuse) e si è scaricato.
Non hai bisogno di uno script, ma di un EA.
No, non sono d'accordo. Questo codice
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
è testato e funziona. Qui ci sono semplici doppi array personalizzati, e CopyRates() riempie un array di strutture e quindi non è possibile selezionare max e min usando funzioni di array.
Beh, te lo dico - anch'io stavo guardando il tuo codice in modo super attento. Quindi - lo scherzo riguarda me.
SZY... Ma il mio codice restituisce quattro valori: High/Low/Highest/Lowest, il tuo restituisce solo High e Low, e il mio codice controlla il successo della copia dei dati (anche se non tutti), il tuo no...
È così che il mio codice controlla la copia completa dei dati richiesti:
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Begin=1; // Бар начала диапазона поиска
input int RangeBars=20; // Диапазон поиска
//---
int bars=Bars(Symbol(),PERIOD_CURRENT);
int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);
int rangeBars=(RangeBars<2?2:
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
MqlRates array[];
double high=0, low=0;
int highest=-1, lowest=-1;
if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)==rangeBars) {
ArraySetAsSeries(array,true);
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double high=DBL_MIN;
bar_highest=-1;
for(int i=0; i<sz; i++) {
double value=fmax(array[i].open,array[i].close);
if(value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return(high);
}
//+------------------------------------------------------------------+
double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double low=DBL_MAX;
bar_lowest=-1;
for(int i=0; i<sz; i++) {
double value=fmin(array[i].open,array[i].close);
if(value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return(low);
}
//+------------------------------------------------------------------+