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
Come posso codificare questo?
Se il mercato tocca (X.XX50 o X.XX00)
allora compra. Come identificare gli ultimi due numeri?
Grazie.Questo dovrebbe farlo:
if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,0.50) ; }
else { xPrice = Close - ( MathMod(100*Close,0.50)*0.01 ) ; }
P1Buffer = xPrice + Point*50;
P2Buffer = xPrice ;
P3Buffer = xPrice - Point*50;
[/CODE]
When MathMod(Close,0.50) = 0 then the price ends in 00 or 50.
Here's my indicator to identify 00 lines:
[CODE]
//+------------------------------------------------------------------+
//| _TRO_00_Lines |
//| |
//| |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightGray
#property indicator_color2 LightGray
#property indicator_color3 LightGray
// indicators parameters
//---- buffers
double P1Buffer[];
double P2Buffer[];
double P3Buffer[];
double xPrice ;
int myStyle = 2 ;
int myWingDing = 250 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0, P1Buffer);
SetIndexBuffer(1, P2Buffer);
SetIndexBuffer(2, P3Buffer);
SetIndexArrow(0, myWingDing);
SetIndexArrow(1, myWingDing);
SetIndexArrow(2, myWingDing);
SetIndexStyle(0, DRAW_ARROW, myStyle, 1);
SetIndexStyle(1, DRAW_ARROW, myStyle, 1);
SetIndexStyle(2, DRAW_ARROW, myStyle, 1);
SetIndexEmptyValue(0,0);
SetIndexEmptyValue(1,0);
SetIndexEmptyValue(2,0);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, dayi, 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--;
int limit = Bars - counted_bars;
//----
for(i = limit - 1; i >= 0; i--)
{
if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,1.00) ; }
else { xPrice = Close - ( MathMod(100*Close,1.00)*0.01 ) ; }
P1Buffer = xPrice + Point*100;
P2Buffer = xPrice ;
P3Buffer = xPrice - Point*100;
} // for
return(0);
} // startNe ho bisogno per un EA però!
I codificatori aiutano per favore
Cosa cambiare nel codice per spostare più punti su e giù dalle candele?
Qualcuno potrebbe davvero aiutarti se postassi il codice.
Lux
Ecco l'indicatore
Indicatore è possibile modificare il codice per spostare su e giù i punti
uso corretto di Time[]
Sono un discreto programmatore ma nuovo di mql4. Sto lavorando su un consulente esperto di box trade (aka breakout trade). Essenzialmente dovrebbe trovare i valori più alti e più bassi per uno specifico time frame, e quando una candela chiude al di fuori di quel box piazzo un trade.
Essenzialmente ci sono tre stati in cui posso far partire il mio EA
1) dopo la chiusura del giorno precedente, e prima dell'ora di inizio del box.
2) dopo l'inizio del box ma prima della fine del box.
3) dopo la fine del box.
Quello che mi confonde è l'array Time[] perché l'indice continua a cambiare. Supponiamo che io entri allo stato 2. Nella funzione init avevo intenzione di impostare una variabile globale che desse la posizione dell'inizio del box. Man mano che le citazioni entrano la mia funzione start viene costantemente chiamata, e una volta raggiunto il tempo di fine della scatola avrei avuto le posizioni di inizio e fine. Ovviamente non è così, perché l'indice dell'array Time continua a scorrere in avanti.
Nel migliore dei casi posso continuare ad incrementare la posizione dell'indice di inizio della casella, ma questo non sembra un modo molto pulito di fare le cose.
Se avete un suggerimento su come dovrei cambiare il mio modo di pensare dal tradizionale c/c++ a mql4 mi piacerebbe sentirlo.
Inoltre, quando ho finito, trarrei ovviamente grande beneficio da una revisione del codice da parte di un programmatore più anziano. Qualcuno vorrebbe offrirsi volontario per questo?
Grazie per il vostro tempo,
Markus
Sono un discreto programmatore ma nuovo di mql4. Sto lavorando ad un consulente esperto di box trade (aka breakout trade). Essenzialmente dovrebbe trovare i valori più alti e più bassi per uno specifico time frame, e quando una candela chiude fuori da quel box piazzo un trade.
Essenzialmente ci sono tre stati in cui posso far partire il mio EA
1) dopo la chiusura del giorno precedente e prima dell'ora di inizio del box.
2) dopo l'inizio del box ma prima della fine del box.
3) dopo la fine del box.
Quello che mi confonde è l'array Time[] perché l'indice continua a cambiare. Supponiamo che io entri allo stato 2. Nella funzione init avevo intenzione di impostare una variabile globale che desse la posizione dell'inizio del box. Man mano che le citazioni entrano la mia funzione start viene costantemente chiamata, e una volta raggiunto il tempo di fine della scatola avrei avuto le posizioni di inizio e fine. Ovviamente non è così, perché l'indice dell'array Time continua a scorrere in avanti.
Nel migliore dei casi posso continuare ad incrementare la posizione dell'indice di inizio della casella, ma questo non sembra un modo molto pulito di fare le cose.
Se avete un suggerimento su come dovrei cambiare il mio modo di pensare dal tradizionale c/c++ a mql4 mi piacerebbe sentirlo.
Inoltre, quando ho finito, trarrei ovviamente grande beneficio da una revisione del codice da parte di un programmatore più anziano. Qualcuno vorrebbe offrirsi volontario per questo?
Grazie per il vostro tempo,
MarkusCiao, la funzione Time[] non continua a cambiare - solo alla fine della barra del grafico corrente cambia. TimeCurrent() invece restituisce un valore che cambia continuamente (anche se con una risoluzione di 1 secondo).
È possibile ottenere il tempo esatto di qualsiasi barra e timeframe usando anche iTime(). Ci sono diversi modi per farlo...
aprire due ordini nello stesso tempo (problema...)
Ciao, non so perché in alcune opportunità lo script apre due ordini nello stesso momento.
qualcuno può aiutarmi con questo, per favore
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);
altrimenti
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,EAName, MagicNo, 0,Verde);
se(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordine BUY aperto : ",OrderOpenPrice());
}
else Print("Errore nell'apertura dell'ordine BUY: ",GetLastError());
grazie
Aiuto per il codice
Ciao a tutti,
Vorrei codificare un indicatore per calcolare il valore di chiusura che crea un'inversione di un indicatore come l'HMA. Per questo ho bisogno di creare una funzione per calcolare un valore di HMA con una scheda di valori di chiusura dove modifico il valore corrente in un ciclo dicotomico per trovare il valore che crea l'inversione.
Qualcuno può aiutarmi con la mia funzione ComputeHull?
Qui il mio codice, senza ricerca dicotomica è solo un semplice indicatore HMA con funzione ComputeHull, l'indicatore viene visualizzato ma è spostato verso il basso
Saluti
//#proprietà indicator_separate_window
#proprietà indicator_chart_window
#proprietà indicator_buffers 3
#proprietà indicator_color1 Blue
//---- parametri di input
extern int HullAntPeriod=12;
//---- buffer
double TempBuf1[]
double TempBuf2[]
double HullAntBuf[]
//Variabile
int HalfHullAntPeriod;
int SqrtHullAntPeriod;
//+------------------------------------------------------------------+
//| Funzioni specifiche |
//+------------------------------------------------------------------+
double ComputeHull(int ActualBar)
{
double CloseTemp[]
double Temp[];
doppio Temp1, Temp2;
doppio risultato = -1;
int i;
//Copia i valori di chiusura in CloseTemp
ArrayResize(CloseTemp, HullAntPeriod+SqrtHullAntPeriod);
ArrayCopy(CloseTemp, Close, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod);
ArraySetAsSeries(CloseTemp, true);
ArrayResize(Temp, SqrtHullAntPeriod);
//calcolo del valore HMA
for(i=0; i<SqrtHullAntPeriod; i++)
{
Temp1 = iMAOnArray(CloseTemp, 0, HalfHullAntPeriod, 0, MODE_LWMA, i);
Temp2 = iMAOnArray(CloseTemp, 0, HullAntPeriod, 0, MODE_LWMA, i);
Temp = 2*Temp1-Temp2;
}
ArraySetAsSeries(Temp, true);
risultato = iMAOnArray(Temp, 0, SqrtHullAntPeriod, 0, MODE_LWMA, 0);
//---- fatto
return(risultato);
}
//+------------------------------------------------------------------+
//|Funzione di inizializzazione dell'indicatore personalizzato |
//+------------------------------------------------------------------+
int init()
{
//---- 1 buffer aggiuntivi sono utilizzati per i dati temporanei.
IndicatorBuffers(3);
//---- impostazioni di disegno
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_NONE);
//---- mappatura di 2 buffer di indicatori
SetIndexBuffer(0,HullAntBuf);
SetIndexBuffer(1,TempBuf1);
SetIndexBuffer(2,TempBuf2);
//---- nome per DataWindow e l'etichetta della sottofinestra dell'indicatore
IndicatorShortName("HULL ANTICIP("+HullAntPeriod+")");
SetIndexLabel(0, "HULL ANTICIPATION");
SetIndexLabel(1,NULL);
SetIndexLabel(2,NULL);
//---- Inizializzazione dell'indicatore specifico
HalfHullAntPeriod = MathFloor(HullAntPeriod/2);
SqrtHullAntPeriod = MathFloor(MathSqrt(HullAntPeriod));
//---- inizializzazione fatta
return(0);
}
//+------------------------------------------------------------------+
//| Funzione di deinizializzazione dell'indicatore personalizzato |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Funzione di iterazione dell'indicatore personalizzato |
//+------------------------------------------------------------------+
int start()
{
int barra, limite, i;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limite=Bars-counted_bars;
for(i=0; i<limite; i++)
HullAntBuf=ComputeHull(i);
//----
return(0);
}
//+------------------------------------------------------------------+
Perché non funziona?
double Place;
int Start()
{
Highest=iHighest(Symbol(),0,MODE_HIGH,1,0);Place=iHigh(Symbol(),0,Highest);
if(Gate==0){
if(iClose(Symbol(),0,0)>=Place){
OrderModify(ticket3,Ask,Ask-TrailingStop*Point-Spread,0,0,Green);
Gate=1;}
return(0);
}Ricevo degli errori. Non riesco a fare un semplice trailing stop!!!!!!!