Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 550
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
Ho bisogno di aiuto per trovare il valore massimo dell'indicatore N per il giorno precedente; ricevo i dati attraverso iCustom, ma è un blocco. Penso che sia fatto attraverso ArrayMaximum, ma come trovare il valore
Non riesco a capire come inserire iCustom lì dentro, ma non riesco a pensare ad altre opzioni.
1. Trova il numero di barra all'inizio del giorno precedente, trova il numero di barra alla fine per.
2. Farei un loop da un numero all'altro e calcolerei il massimo.
Naturalmente potete usare ArrayMaximum, ma dopo il primo passo.
Scusa per l'inondazione, te lo chiedo di nuovo.
Potete suggerire un indicatore di interesse aperto gratuito? Grazie in anticipo!
Non si possono scrivere codici così distrattamente :)
Vai a Comment("USDCADAsk = ",USDCADAsk); seguito da USDCADAsk = DoubleToString(MarketInfo("USDCAD",MODE_ASK),usdcaddigits); USDCADAsk è dichiarato come doppio e tu ci metti una stringa,
e poi Digits.... di nuovo ^) e Punto
Dovete cercare voi stessi tali errori, nessuno li aggiusterà per voi così come il commercio! Il compilatore genera 28 errori e voi mettete la demo nel trading. Avresti voluto usare soldi veri, ma il mercato ti avrebbe corretto!
Di chi è il Bid Ask?
Corretto
Si è scoperto che non c'era bisogno di usare variabili aggiuntive e quindi non c'è bisogno di normalizzare, dovrebbe essere così.
Si è scoperto che non c'era bisogno di usare variabili aggiuntive e quindi non c'è bisogno di normalizzare, dovrebbe essere così.
In primo luogo, tu stesso hai provato a visualizzarli sullo schermo per controllare, che ha portato a errori, e in secondo luogo, la normalizzazione è auspicabile e l'ordine di impostazione prezzo e TP, SL. Se il prezzo non è normalizzato, può causare errori. Questa è la regola e non dobbiamo infrangerla. Vedere esempi e analizzare perché questo è il caso e non il contrario, ad esempio https://book.mql4.com/ru/samples/shared
Ciao, se non ti dispiace dirmi come aggiungere, ad esempio, il 23% a OrderOpenPrice? Se sapete che OrderOpenPrice è già 77%. Divido per 77, moltiplico per 23 e ottengo 7 punti invece di 31. Ecco una linea di codice se (MarketInfo-OrderOpenPrice()>OrderOpenPrice()/50*Percent*Point). Questo è un trasferimento a Breakeven, ma non in punti, ma in punti percentuali. Grazie in anticipo!
Ho comprato centomila euro a 50 rubli, poi aggiungo il 23% al prezzo di acquisto.
Per il tuo caso, devi stendere il codice per intero. Anche se se volete solo portarlo al 100%, dividete per 0,77.
Grazie per la vostra risposta. Ecco tutto il codice
//+----------------------------------------------------------------------------+
//| e-MovingInWL2.mq4 |
//| |
//| Kim Igor V. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 27.10.2008 Il consulente sposta lo stop al pareggio.
//+----------------------------------------------------------------------------+
#proprietà copyright "Kim Igor V. aka KimIV"
#proprietà link "http://www.kimiv.ru"
//------- Parametri esterni dell'Expert Advisor -----------------------------------------+
extern string _P_Expert = "---------- parametri EA";
extern bool AllSymbols = True; // Guarda le posizioni di tutti i simboli
extern int Magic = -1; // Identificatore di posizione
extern int LevelProfit = 25; // livello di profitto in punti
extern int LevelWLoss = 1; // Livello di pareggio in punti
extern bool ShowComment = True; // Mostra il commento
//------- Parametri di esecuzione degli ordini di compravendita ------------------------------+
extern string _P_Performance = "---------- Parametri di esecuzione";
extern bool UseSound = True; // Usa il segnale sonoro.
extern string SoundSuccess = "expert.wav"; // Suono di successo
extern string SoundError = "timeout.wav"; // suono di errore.
extern inttern NumberOfTry = 2; // Numero di tentativi
//------- Variabili globali dell'Expert Advisor -------------------------------------+
bool gbDisabled = False; // Flag di EA bloccato
bool gbNoInit = False; // Flag di inizializzazione fallita
colore clModifyBuy = Aqua; // colore clModifyBuy icona
colore clModifySell = Tomato; // colore dell'icona di modifica della vendita
//------- Collegamento di moduli esterni -----------------------------------------+
#include <stdlib.mqh>
//+----------------------------------------------------------------------------+
//| |
//| FUNZIONI PREDEFINITE |
//| |
//+----------------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+----------------------------------------------------------------------------+
void init() {
gbNoInit=False;
se (!IsTradeAllowed()) {
Messaggio("Affinché l'EA funzioni correttamente, è necessario "+
"Permettere all'EA di commerciare");
gbNoInit=True; return;
}
se (!IsLibrariesAllowed()) {
Messaggio("Per far sì che l'EA funzioni correttamente, è necessario "+
"Permettere l'importazione da EA esterni");
gbNoInit=True; return;
}
se (!IsTesting()) {
se (IsExpertEnabled()) Message("The Expert Advisor will be started with the next tick");
else Message("Il pulsante "Consenti l'avvio degli EA{") viene rilasciato;
}
start();
}
//+----------------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+----------------------------------------------------------------------------+
void deinit() {
se (!IsTesting()) Commento(");
}
//+----------------------------------------------------------------------------+
//| funzione di inizio esperto |
//+----------------------------------------------------------------------------+
void start() {
se (gbDisabled) {
Message("Errore critico! EA STOPPED!"); return;
}
se (gbNoInit) {
Message("EA initialization failed!"); return;
}
se (ShowComment) {
Commento(IIFs(AllSymbols, "AllSymbols ", ")
, "Magic="+IIFs(Magic<0, "Any", DoubleToStr(Magic, 0))+" "
, "LevelProfit="+DoubleToStr(LevelProfit, 0)+"n "
, "LevelWLoss="+DoubleToStr(LevelWLoss, 0)+"n "
);
} else Comment(");
stringa sy=IIFs(AllSymbols, "", NULL);
MovingInWL(sy, -1, Magic);
}
//+----------------------------------------------------------------------------+
//| |
//| FUNZIONI UTENTE |
//| |
//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione : 01.09.2005 |
//| Descrizione: restituisce il nome dell'operazione commerciale
//+----------------------------------------------------------------------------+
//| Parametri: ||
//| op - identificatore dell'operazione commerciale |
//+----------------------------------------------------------------------------+
stringa GetNameOP(int op) {
interruttore (op) {
caso OP_BUY : ritorno("Compra");
caso OP_SELL : return("Sell");
caso OP_BUYLIMIT : return("BuyLimit");
caso OP_SELLLIMIT : return("SellLimit");
caso OP_BUYSTOP : return("BuyStop");
caso OP_SELLSTOP : return("SellStop");
default : return("Operazione sconosciuta");
}
}
//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione : 18.07.2008 |
//| Descrizione : Restituisce uno dei due valori a seconda della condizione.
//+----------------------------------------------------------------------------+
colore IIFc(bool condition, colore ifTrue, colore ifFalse) {
se (condizione) return(ifTrue); altrimenti return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione : 01.02.2008 |
//| Descrizione : Restituisce uno dei due valori a seconda della condizione.
//+----------------------------------------------------------------------------+
stringa IIFs(bool condition, string ifTrue, string ifFalse) {
se (condizione) return(ifTrue); altrimenti return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione : 01.09.2005 |
//| Descrizione: visualizzazione di un messaggio nel commento e nel log
//+----------------------------------------------------------------------------+
//| Parametri: |
//| m - testo del messaggio |
//+----------------------------------------------------------------------------+
void Message(string m) {
Commento(m);
se (StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione : 28.11.2006 |
//| Descrizione: modifica di un ordine preselezionato.
//+----------------------------------------------------------------------------+
//| Parametri: |
//| pp - livello di prezzo dell'ordine |
//| sl - livello di prezzo dello stop |
//| tp - livello di prezzo del takeout |
//| ex - data di scadenza |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
colore cl=IIFc(OrderType()==OP_BUY
|| OrderType()==OP_BUYLIMIT
|| OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
doppio op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice(), dg);
os=NormalizeDouble(OrderStopLoss(), dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
se (pp!=op || sl!=os || tp!=ot) {
for (it=1; it<=NumeroOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
mentre (!IsTradeAllowed()) Dormire(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
se (fm) {
if (UseSound) PlaySound(SoundSuccess); break;
} else {
er=GetLastError();
se (UseSound) PlaySound(SoundError);
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Print("Error(",er,") che modifica l'ordine:",ErrorDescription(er),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);
Dormire(1000*10);
}
}
}
}
//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione : 23.04.2009 |
//| Descrizione: Sposta il livello di stop su lossless |
//+----------------------------------------------------------------------------+
//| Parametri: |
//| sy - nome dello strumento ( "" - qualsiasi simbolo, |
//| NULL - simbolo corrente) |
//| op - operazione ( -1 - qualsiasi posizione) |
//| mn - MagicNumber ( -1 - qualsiasi magia) |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
doppio po, pp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
per (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
se ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op)) {
se (mn<0 || OrderMagicNumber()==mn) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
se (OrderType()==OP_BUY) {
se (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
se (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
se (OrderType()==OP_SELL) {
se (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
se (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
In primo luogo, tu stesso hai provato a visualizzarli sullo schermo per controllare, che ha portato a errori, e in secondo luogo, la normalizzazione è auspicabile e l'ordine di impostazione prezzo e TP, SL. Se il prezzo non è normalizzato, può portare ad errori. Questa è la regola e non dobbiamo infrangerla. Vedere esempi e analizzare perché questo è il caso e non il contrario, ad esempio https://book.mql4.com/ru/samples/shared
Non l'ho scritto per rimproverare, ma solo per far vedere agli altri. Grazie per il vostro tempo.