Come codificare? - pagina 233

 
CoeyCoey:
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 è:

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

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!

 
mfurlend:

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.

File:
 

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 profit = OrderProfit() + OrderSwap() + OrderCommission();

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 hh2=Alto;

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.

File:
cutoff.jpg  5 kb
 

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_chart_window

#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 ...

File:
laguerre.mq4  3 kb
Motivazione: