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
Ciao a tutti,
Sto lavorando alla modifica di un misuratore di forza delle valute per mostrare la forza della valuta in base al tempo del grafico. Al momento, il codice utilizzato è:
aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today
aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid
aAsk = MarketInfo(mySymbol,MODE_ASK);Ho capito che MODE_HIGH e MODE_LOW ottengono i massimi e i minimi del giorno corrente. Come potrei invece ottenere il massimo e il minimo del time frame corrente del grafico?
Grazie!
P.S. Non sono un programmatore, quindi usate parole piccole per favore:)Non devi usare MarketInfo(). Se vuoi ottenere il massimo corrente, usa High[0] e Low[n], Close[n], Open[n]. 'n' indica l'offset dalla barra corrente. Per esempio per ottenere il massimo della barra prima della corrente, puoi usare High[1] dato che la corrente è 0 e la barra prima di essa ha un offset di 1 dalla corrente.
Per controllare i massimi, i minimi, le aperture e le chiusure di altri timeframe diversi da quelli che state visualizzando sul grafico, potete usare le funzioni iHigh(), iLow(), iClose() e iOpen.
Esempio di utilizzo qui sotto.
double high_of_gbpusd_4hours_current = iHigh("gbpusd", period_h4, 0);
Grazie! Siete dei grandi!
Penso di averlo più o meno funzionante (non ne sono sicuro??), ma per qualche motivo l'array viene riempito con molti valori '0' insieme ai valori legittimi.
Ecco come farei io:
#define TICKET 0
#define PRICES 1
double ResumeArray[0,2];
int CheckForResume()
{
ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;
bool success = false;
int k;
for (int i = 0; i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
if (OrderType() > OP_SELL || OrderProfit()> Cutoff)continue;
int arraycount=ArrayRange(ResumeArray,TICKET);
bool found = false;
for (k=arraycount-1; k>=0; k--)
{
if (ResumeArray[k,TICKET] == OrderTicket())
{
found = true;
if (ResumeArray[k,PRICES] + Cutoff < OrderProfit())break;
else
{
success=true;
Print ("ELSE");
ResumeArray[k,PRICES] = OrderProfit();
break;
}
}
}
if (found == false)
{
arraycount = ArrayResize(ResumeArray,arraycount+1)/2;
ResumeArray[arraycount-1,TICKET] = OrderTicket();
ResumeArray[arraycount-1,PRICES] = OrderProfit();
success=true;
}
}
if(success)return (1);
else return(0);
}
Non dovete usare le definizioni TICKET e PRICES, le ho incluse solo per mostrare come funziona un array a 2 dimensioni. Sostituite semplicemente tutte le occorrenze di TICKET e PRICES con 0 e 1 rispettivamente.
Ho sostituito i comandi 'return' nel ciclo 'for' con 'break', quindi tutti gli ordini aperti saranno processati.
Una cosa da notare è che gli ordini chiusi non vengono mai rimossi dall'array, quindi continuerà a crescere di dimensioni e rallenterà la vostra piattaforma.
d4v3
Limite della cronologia delle barre
Sarei molto grato se qualcuno potesse aggiungere l'opzione limite delle barre a questo script RenkoLiveChart_v3.2.
Richiede troppe risorse del computer.
Allarme di base EA
................[risolto] ....................
riduzione del rumore
ciao a tutti - ho cercato un modo per limitare il rumore su un trade e fare un cutoff più veloce
L'idea è in realtà abbastanza semplice
il rumore è mostrato in questa foto, il suo significato dinamico continua a cambiare per adattarsi alle condizioni del mercato
Qui c'è del codice che ho fatto per la chiusura, se qualcuno vuole usarlo si senta libero di farlo, ha solo bisogno di alcuni moltiplicatori.
int Trades = ScanTrades(0,0);
if (Trades == 0) TS1 = 0;
se ((ScanTrades(2,0) > 0) && (profitto < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + rumore + Slippage);
se ((ScanTrades(2,0) > 0) && (profitto > 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + rumore );
se ((ScanTrades(1,0) > 0) && (profitto < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) - rumore - Slippage);
se ((ScanTrades(1,0) > 0) && (profitto > 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) - rumore );
//corto
se ((ScanTrades(2,0) > 0)&& (TS1 ==0 )) TS1 = TS;
se ((ScanTrades(2,0) > 0)&& (TS < TS1)) TS1 = TS;
se ((ScanTrades(2,0) > 0) && (MarketInfo(Symbol(),MODE_BID) > TS1)) CloseOrder(2);
/lungo
se ((ScanTrades(1,0) > 0)&& (TS1 ==0 )) TS1 = TS;
se ((ScanTrades(1,0) > 0)&& (TS > TS1)) TS1 = TS;
se ((ScanTrades(1,0) > 0) && (MarketInfo(Symbol(),MODE_BID) < TS1)) CloseOrder(1);
quale sarebbe il modo migliore per ottenere il massimo e il minimo attuale e precedente da un grafico a barre. Ho bisogno di creare la variabile "rumore".
Ho provato questo ma il suo hit and miss t1 e l1 sono a volte 0 il suo più deprimente come il suo tutto che sta tra l'intero ea essere "finito" se c'è mai una tale cosa.
doppio ll2=Basso;
doppio hh3=Alto;
doppio ll3=Basso;
doppio t1,l1,rumore;
//noise = sovrapposizione delle barre precedenti
se ((hh2 - hh3) > 0 ) t1 =(hh3); //semplicemente scegliendo la barra "alta" più bassa tra le due -bullish
se ((hh3- hh2) > 0 ) t1=(hh2); //prendente
se ((ll2 - ll3) > 0 ) l1 =(ll2); //prendendo la barra bassa più alta rialzista
se ((ll3-ll2) > 0 ) l1=(ll3); //trend rialzista
rumore =(t1-l1);
Stampa("t1 = ",t1,"; l1 = ",l1);i risultati tipici della stampa sono t1=0 l1=94.3 la cosa più fastidiosa è che hh2 e hh3 sono == non so proprio cosa fare non vedo un problema nel mio codice.
chi può aiutarmi?
qualcuno può mostrarmi come creare un nuovo indicatore basato su 3 indicatori conosciuti? Faccio una strategia basata su 3 indicatori che mostrano segnali di acquisto/vendita molto forti, ma voglio creare 1 indicatore...
emendamento ea per favore
Per favore aiutatemi a implementare le seguenti modifiche a questo ea
1)Aggiungere in ora
A) indicatore fisher_ 11 con impostazioni 33,0.5,0.5
B) indicatore tcf smoothed con impostazioni 17, 8, 0.7
c) Inoltre voglio che l'indicatore dinap _basic non permetta operazioni quando ha disegnato contro la direzione del segnale, cioè se disegna verso l'alto, i segnali di acquisto non sono permessi, se disegna verso il basso, i segnali di vendita non sono permessi.
2) Aggiungere in 15 minuti
A) indicatore supertrend
B) indicatore Trendlord
Gestione del denaro di
1) Aprire 2 trade al 3% di stop loss del conto totale (1,5%) ciascuno
2) Uno a 80 pip take profit o 2,2% e il secondo al 3,8% take profit
3) Raddoppia la dimensione del lotto per il quinto trade dopo 4 perdite consecutive, poi aumenta linearmente i lotti per i trade successivi fino a due vittorie consecutive e torna alla dimensione predefinita del lotto.
4) Trailing stop di 12pips (sopra per vendere e sotto per comprare dell'indicatore atrstops_v1 della candela precedente per tutti i trade.
Questo è tutto, per favore aiutatemi
Avreste potuto ottenere esattamente la stessa cosa con una sola riga di codice.
GlobalVariableSet("TRENDSET_"+Symbol());
Si potrebbe anche aggiungere il lasso di tempo per renderlo ancora più unico.
Non sono sicuro di quale fosse il punto del tuo post per essere onesto.
Saluti
Lux
Come chiamare il valore da H1 usando iCustom?
Salve, sto cercando di codificare un indicatore molto semplice,
Sto cercando di codificare un indicatore molto semplice, ma non riesco a chiamare il valore Laguerre da H1.
cosa voglio fare:
Utilizzando 1M TF
segnale di acquisto: Laguerre che attraversa il livello 0.15 in testa e Laguerre H1 > 0.75
segnale di vendita: Laguerre che attraversa 0.75 livello testa in giù e Laguerre H1 < 0.15
Ho fatto l'indicatore per il cross semplice e funziona, il problema è quando cerco di controllare il valore da Laguerre H1: è un casino!
Ho provato in 2 modi:
Il primo:
#property indicator_buffers 2
#property indicator_color1 SeaGreen
#property indicator_color2 Red
#property indicator_width1 3
#property indicator_width2 3
double CrossUp[];
double CrossDown[];
extern bool SoundON=true;
double alertTag;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY,3);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY,3);
SetIndexArrow(1, 234);
SetIndexBuffer(1, CrossDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int limit, i;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(i = 0; i <= limit; i++) {
if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) > 0.15) && (iCustom(NULL,0,"Laguerre",0.66,9500,0,i+1) < 0.15)
&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) > 0.75)) //check for buy signal
{
CrossUp = Close;
}
else if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) 0.75)
&& (iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) < 0.15)) //check for sell signal
{
CrossDown = Close;
}
if (SoundON==true && i==1 && CrossUp > CrossDown && alertTag!=Time[0]){
Alert("SHORT signal on ",Symbol()," ",Period());
alertTag = Time[0];
}
if (SoundON==true && i==1 && CrossUp < CrossDown && alertTag!=Time[0]){
Alert("Long Signal on ",Symbol()," ",Period());
alertTag = Time[0];
}
}
return(0);
}[/CODE]
second one:
[CODE]//+------------------------------------------------------------------+
//| Shift.mq4 |
//| me |
//|
//+------------------------------------------------------------------+
#property copyright "me"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 4
#property indicator_width2 4
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
bool Fact_Up = true; // Fact of report that market..
bool Fact_Dn = true; //..is bullish or bearish
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,241);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,242);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
if(counted_bars<0) return(-1);
//limit=Bars-counted_bars;
//----
double MA; // MA value on 0 bar
double MA2;
double MA3;
double MA4;
//--------------------------------------------------------------------
double value1, value2, value3;
for (int i=Bars-1;i>=0;i--)
//---- main loop
//for(int i=0; i<limit; i++)
{value1=0.0;
value2=0.0;
value3=0.0;
//--------------------------------------------------------------------
// Checking if bullish
if( (iCustom(Symbol(),NULL,"Laguerre",0,i) > 0.15) && (iCustom(Symbol(),NULL,"Laguerre",0,i+1) < 0.15) && Fact_Up == true
&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) > 0.75))
{
Fact_Dn = true; // Report about bullish market
Fact_Up = false; // Don't report bullish market
// Alert("BUY SIGNAL.");
value1=Open;
}
//--------------------------------------------------------------------
// Checking if bearish
if( (iCustom(Symbol(),NULL,"Laguerre",0,i) 0.75) && Fact_Dn == true
&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) < 0.15))
{
Fact_Up = true; // Report about bearish market
Fact_Dn = false; // Don't report bearish market
// Alert("SELL SIGNAL.");
value2=Open;
}
ExtMapBuffer1=value1;
ExtMapBuffer2=value2;
}
//----
return(0);
}
//+------------------------------------------------------------------+entrambi non funzionano, la linea ROSSA è il problema, senza la linea ROSSA funziona perfettamente.
Ho provato (iCustom(Symbol(),PERIOD_H1, "Laguerre",0,i) < .....)
(iCustom(Symbol(),PERIOD_H1, "Laguerre",0,0) < ....)
(iCustom(Symbol(),60, "Laguerre",0,i) < ....)
(iCustom(Symbol(),60, "Laguerre",0,0) < .....)
Ho provato anche con le variabili: (iCustom(Symbol(),PERIOD_H1, "Laguer re",0.66,9500,0,i)
iF i put:
Print(iCustom(Symbol(),60, "Laguerre ",0,i)); prima del "se" restituisce un numero casuale...
ma con: Print(iCustom(Symbol(),60, "Laguerre ",0,0)); restituisce il valore buono di H1
ora il problema rimane lo stesso se uso iCustom(Symbol(),60, "Laguerre",0,0); dentro l'"if" non funziona...
il problema è con il "for" e "i" e il valore "shift" di iCustom ma non riesco a capirlo.
il vostro aiuto sarebbe molto gradito!
Ho allegato l'indicatore Laguerre che uso se volete fare una prova.
se qualcuno è pronto a ricodificarlo da zero non esitate
mi sta facendo impazzire ...