Aiuto per la codifica - pagina 351

 
mladen:
stevenpun Per questo sarebbe il più semplice aggiungere un buffer "slope direction" a quell'indicatore o usare qualche altro MACD che ha già quella slope risolta in un buffer

Che ne dite di questo https://www.mql5.com/en/forum/178018/page67

Ma il problema è che cosa devo mettere nel codice, ho cercato su Google molti ea ma non sono riuscito a trovare qualche esempio.

Per favore mostratemi qualche esempio, grazie per l'aiuto.

 
stevenpun:
Che ne dici di questo https://www.mql5.com/en/forum/178018/page67

Ma il problema è che cosa devo mettere nel codice, ho cercato su Google molti ea ma non sono riuscito a trovare qualche esempio.

Per favore mostrami qualche esempio, grazie per l'aiuto.

stevenpun

Questo sarebbe un buon esempio da usare.

Leggi il buffer "colori" e quando il valore in esso cambia da -1 a 1 è un segnale di acquisto, e quando il valore cambia da 1 a -1 è un segnale di vendita (il "da" è il valore precedente del buffer colori e "a" è il valore attuale, o se vuoi lavorare solo con barre chiuse, "da" è 2 barre fa e "a" è 1 barra fa)

 

Salve..,

sono nuovo qui. Vorrei aggiornare un oggetto rettangolo, ma non so come. Il codice qui sotto ho usato per creare rettangoli oggetto, se EMAs attraversato. Questi rettangoli devono essere finiti se il prezzo torna indietro e lo tocca. Come fare?

Grazie in anticipo.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrLime

#property indicator_width1 2

#property indicator_color2 clrMagenta

#property indicator_width2 2

extern int EMA1 = 3;

extern int EMA2 = 21;

extern int EMA3 = 63;

extern double arrowDistance = 0.0003;

extern color upRectColor = clrYellow;

extern color dnRectColor = clrDodgerBlue;

extern color touchRectColor = clrDarkGray;

//---

extern double rectHigh = 0.0001;

extern int rectDays = 3;

extern int bars_limit = 2000;

extern bool showRectangle = true;

double upArrow[];

double dnArrow[];

double prev2EMA1, prev2EMA2, prev2EMA3;

double prevEMA1, prevEMA2, prevEMA3;

double curEMA1, curEMA2, curEMA3;

double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;

string objRectName;

string rectArray[];

string indiName = "Emac";

int rectValidity = 0;

int arrayMaxAmounts = 99999;

int arrayCurAmount = 0;

int arrayLastAmount = 0;

//+------------------------------------------------------------------+

//| INIT() |

//+------------------------------------------------------------------+

int init() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);

IndicatorBuffers(2);

SetIndexBuffer(0,upArrow);

SetIndexBuffer(1,dnArrow);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexArrow(1,234);

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

SetIndexLabel(0,"Up");

SetIndexLabel(1,"Dn");

return(0);

}

//+------------------------------------------------------------------+

//| DEINIT() |

//+------------------------------------------------------------------+

int deinit() {

int k=0;

while (k<ObjectsTotal()) {

string objname = ObjectName(k);

if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")

ObjectDelete(objname);

else

k++;

}

return(0);

}

//+------------------------------------------------------------------+

//| START() |

//+------------------------------------------------------------------+

int start() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

int limit,i,k;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---

if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;

if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {

Alert("Adjust limit settings or put more bars on your chart!");

return(0);

}

//---

for (i=0; i<limit; i++) {

prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);

prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);

curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);

curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);

curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);

prevOpenPrc = iOpen(NULL,0,i+1);

prevClosePrc = iClose(NULL,0,i+1);

prevLowPrc = iLow(NULL,0,i+1);

prevHighPrc = iHigh(NULL,0,i+1);

rectValidity = rectDays*86400;

if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up

upArrow = prevLowPrc - arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down

dnArrow = prevHighPrc + arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

} // for

//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------

return(0);

} // start

//+------------------------------------------------------------------+

void DelObjects(string id) {

int ot1=ObjectsTotal();

while(ot1>=0) {

if (StringFind(ObjectName(ot1),id,0)>-1) {

ObjectDelete(ObjectName(ot1));

}

ot1--;

}

return;

}

//+------------------------------------------------------------------+

string FuncPeriodToStr(int thePeriod) {

switch(thePeriod) {

case 1: return("M1");

case 5: return("M5");

case 15: return("M15");

case 30: return("M30");

case 60: return("H1");

case 240: return("H4");

case 1440: return("D1");

case 10080: return("W1");

case 43200: return("MN1");

default: return("MN1");

}

}

//+------------------------------------------------------------------+

 

Come comunicare tra due o più EA?

 

Il nuovoBie sta cercando di sviluppare questo per MT4 build 670. Aiuto ~

Scaricare il 'Tre medie mobili' Trading Robot (Expert Advisor) per MetaTrader 5 in MetaTrader Market?

Mi piace questo perché mi piace K.I.S.S. (keep it simple stupid)

Sono un principiante e vorrei sviluppare questo.

(1. versione_01)

Quando gira, piazza subito la posizione non appena l'EA è attivo.

È come il reverse engineering da .ex5 per creare .mq4.

(2. versione_02)

Sullo stesso grafico, visualizza R & S settimanale che sarà trovato da Zig-Zag.

(3. versione_03)

Aggiungere la logica,

--- non entrare sopra o sotto i 20pips della trendline.

cancellare la posizione, a 20 pip di distanza dalla R & S settimanale.

Il vostro aiuto vi sarà grato ~

Grazie in anticipo ~

 

cosmiclifeform, è divertente che non ho potuto ottenere il Nice TraderEA per il backtest da allora, quindi non ho potuto ottimizzarlo, l'ho fatto su alpari demo e ista forex, lo stesso....it continua a darmi il risultato vuoto.

cosmiclifeform:
Ciao Mastercash,

Sono stato in grado di scaricare ed eseguire l'EA NiceTrader nello Strategy Tester senza problemi.

Ho solo usato le impostazioni predefinite e non ho cambiato nulla... e non ho ricevuto alcun messaggio di errore.

Non ho provato a eseguirlo in tempo reale sulla mia demo... ma questo EA funziona bene con lo Strategy Tester. Vedi grafico allegato...

Ricevi qualche messaggio di errore nel log o altri indizi sul perché non fa trading per te...?

Spero che questo aiuti,

Robert

 
Mastercash:
cosmiclifeform, è divertente che non ho potuto ottenere il Nice TraderEA per il backtest da allora, quindi non ho potuto ottimizzarlo, l'ho fatto su alpari demo e ista forex, lo stesso....it continua a darmi risultati in bianco.

Ciao Mastercash,

Ho eseguito l'EA su un conto demo FXDD... e non ho fatto nulla di speciale... ho solo eseguito l'EA nello Strategy Tester con le impostazioni predefinite.

Vorrei poterti aiutare di più... ma senza indizi specifici da rintracciare (log degli errori, screenshot e altre condizioni) sarà impossibile scoprire perché stai ottenendo risultati vuoti.

Tutto quello che posso raccomandare è...

Prima prova un buon EA nel tester che sai che funziona bene.

Questo stabilirà che sia i tuoi conti demo che le tue procedure sono a posto.

Ottieni prima la tua sicurezza che tutto funziona come dovrebbe.

Poi prova il tuo Nice TraderEA... e scrivi esattamente cosa succede. Anche uno schermo vuoto dovrebbe avere dei log da controllare.

Prova ad aggiungere dichiarazioni PRINT e COMMENT ovunque... poi controlla di nuovo i tuoi log... sia la scheda EA che la scheda Journal...

Anche i vostri COMMENTI appariranno sullo schermo... quindi dovreste vedere il vostro EA funzionare o meno.

La linea di fondo per ottenere un buon aiuto nella codifica...

È quello di fornire il maggior numero di indizi che puoi trovare su ciò che sta accadendo con il tuo EA...

Continua a provare tutto il possibile... e facci sapere i risultati.

Abbi cura di te,

Robert

 
apprentice coder:
Come comunicare tra due o più EA?

Se intendete se c'è qualche funzione o insieme di funzioni dedicate a questo, allora la risposta è che non esiste una cosa del genere.

Ho visto parecchi tentativi e finora nessuno di quelli che ho visto funziona in tutte le situazioni. Tranne uno. Ma uno è inventato da me e poiché l'idea è così semplice che ancora non riesco a credere che nessuno ci abbia pensato (fornisce anche la comunicazione di EAs che non sono affatto nella stessa posizione e non usa alcuna API per questo) allora sto tenendo quella soluzione per me (in questo caso sto aspettando di vedere se qualcuno pensa alla stessa cosa)

Prova a pensare fuori dai limiti previsti

 
mladen:
Se intendi se c'è qualche funzione o insieme di funzioni dedicate a questo, allora la risposta è che non esiste una cosa del genere.

Ho visto diversi tentativi e finora nessuno di quelli che ho visto funziona in tutte le situazioni. Tranne uno. Ma uno è inventato da me e poiché l'idea è così semplice che ancora non riesco a credere che nessuno ci abbia pensato (fornisce anche la comunicazione di EAs che non sono affatto sulla stessa posizione e non utilizza alcuna API per questo) allora sto tenendo quella soluzione per me (in questo caso sto aspettando di vedere se qualcuno pensa alla stessa cosa)

Prova solo a pensare fuori dai limiti previsti

So cosa vuoi dire: le idee a volte valgono molto di più del modo in cui vengono realizzate dopo. Grazie

 

ciao,

caro mladen, ho una piccola richiesta da farti - potresti disattivare tutte le informazioni che l'indicatore allegato sotto mostra nell'angolo superiore sinistro?

grazie in anticipo ;-)

File: