Come codificare? - pagina 179

 
Roger09:
Ho provato diverse volte con l'account Alpari, senza errori. Solo una volta, quando ho messo lo script nella directory esperti e lanciare come EA.

È perché ti ho chiesto delle directory.

Mi dispiace.

Penso di aver capito il problema. Sono su Windows Vista e di solito faccio "esegui come amministratore". Ho provato senza farlo e sembra funzionare bene ora

 

Passare un array da MT4 .mq4 a una DLL C++

Qualsiasi aiuto per favore.

Sto avendo problemi nel passare un singolo array che contiene 8 valori di indicatori a una DLL C++. È molto semplice ma sembra che ottenga -1 quando chiamo la funzione

Forexindex() funzione che in realtà chiama la funzione importata gepModel ( d []) dalla DLL. La funzione ForexIndex dovrebbe restituire 0 o 1 dalla DLL

Ho il sospetto che sto facendo qualcosa di sbagliato nel file .mq4 nella funzione Forexindex(). Qualsiasi aiuto sarà molto apprezzato. Di seguito è riportato il codice semplice. Il file DLL C++ va bene, si compila senza errori, quindi il problema è nel file mq4.

================================MQ4 file====================

#importare "JadeClass.dll"

int gepModel( double& d[] );

#importare

int start()

{

........

........

........

ForexIndex();

.......

......

......

.....

}

int ForexIndex()

{

int myindex;

double ind[] , MA_Close, MA_High, MA_Low, MA_Open, Macd, Rsi, Stoch, Vol;

int counted_bars=IndicatorCounted();

se (counted_bars<0) return(-1);

se (counted_bars>0) counted_bars--;

int pos=Bars-counted_bars;

MA_Close = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_High = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Low = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Open = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

Macd = iMACD(NULL,PERIOD_M5,12,26,9,0,0,0);

Rsi = iRSI(NULL,PERIOD_M5,10,0,0);

Stoch = iStochastic(NULL,PERIOD_M5,14,3,3,0,0,0,0);

Vol = iVolume(NULL,PERIOD_M5,0);

mentre(pos>=0)

{

ind[0] = MA_Close;

ind[1] = MA_High

ind[2] = MA_Low;;

ind[3] = MA_Open;

ind[4] = Macd;

ind[5] = Rsi;

ind[6] = Stoch;

ind[7] = Vol;

myindex = gepModel(ind);

pos--;

}

Print( " Myindex = " , myindex);

return (myindex);

}

=========================DLL Codice sorgente ===========================

#include "stdafx.h"

#include "JadeClass.h"

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

#define MT4_EXPFUNC __declspec(dllexport)

// Il solo e unico oggetto CJadeClassApp

CJadeClassApp theApp;

MT4_EXPFUNC int __stdcall gepModel(double d[]);

MT4_EXPFUNC int __stdcall gepModel(double d[])

{

.....

.....

.....

.....

}

============================ Il file Def per il codice sorgente della DLL ===================

JadeClass.def: Dichiara i parametri del modulo per la DLL.

LIBRERIA "JadeClass"

EXPORTS

; Le esportazioni esplicite possono andare qui

gepModel

========================================

 

Ho bisogno di aiuto per aggiungere codice per un solo trade per segnale

Sto imparando il codice di mq4 e ho passato molte ore a cercare di capire come codificare un solo trade per segnale. Ho provato un po' di modi ma non riesco a fargli fare un solo trade. L'esempio sarebbe che se il TP viene colpito, il programma piazza un altro trade sullo stesso lato perché il segnale è ancora buono. Vorrei che aspettasse fino al segnale d'inversione e poi mettesse quel trade. Ho allegato qui l'EA senza nessuna delle mie modifiche. Grazie in anticipo per l'aiuto. Marty

File:
 
martypatty:
Sto imparando il codice di mq4 e ho passato molte ore a cercare di capire come codificare un solo trade per segnale. Ho provato un po' di modi ma non riesco a fargli fare un solo trade. L'esempio sarebbe che se il TP viene colpito, il programma piazza un altro trade sullo stesso lato perché il segnale è ancora buono. Vorrei che aspettasse fino al segnale di inversione e poi mettesse quel trade. Ho allegato qui l'EA senza nessuna delle mie modifiche. Grazie in anticipo per l'aiuto. Marty

Ho scoperto come fare questo recentemente su mql4.com dopo aver avuto problemi con troppi trade aperti su una barra. Gli articoli di mql4 mi hanno aiutato molto all'inizio, inoltre hanno un database di codice che ti dà buoni esempi su cui lavorare. Ancora questo sito ha un'eccellente storia di post e alcuni codificatori davvero bravi, basta usare la funzione di ricerca e cliccare il pulsante visualizza come post, ti risparmia di guardare attraverso pagine e pagine di un argomento solo per una risposta di cui hai bisogno. Per quanto riguarda il tuo problema basta usare questo codice:

int BarsCount=0;

if(Bars<BarsCount)

{

//Code to do once goes here

BarsCount=Bars;

}

[/CODE]

Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.

[CODE]for(i=0;i<=STD_MA_Period+1;i++)

{

STD_MA_Buffer=iStdDev(Symbol(),Period(),STD_Period,0,MODE_SMA,PRICE_CLOSE,i);

}

Print(STD_MA_Buffer[1]);

PS double STD_MA_Buffer[]; è definito nella sezione delle variabili globali.

 

correggere il mio EA, per favore

ho qualche idea ma posso scriverla nel codice mql4, potete aiutarmi?

questo è il mio problema

Questa è la definizione del mio sistema:

A. se ordini=0 >> OP buy && OP sell

B. fare la griglia per condizione + o -

es. se OPbuy + griglia = OPbuy

se OPbuy - griglia = OPsell

lo stesso per OPsell

C. se profitto > 0 && profitto > profitto minimo (chiusura del profitto)

fermare qualsiasi ordine ( OP buy || OP sell ) e spostare il trailing equity o il punto di profitto

D. chiudere per profitto può essere per equity o per punto

E. formato .mq4 perché voglio sapere dov'è il mio errore

Ho un problema sul punto B. per favore aiutatemi

 
mazgen:
Ho qualche idea ma posso scriverla in codice mql4, potete aiutarmi?

questo è il mio problema

Questa è la definizione del mio sistema:

A. if orders=0 >> OP buy && OP sell

B. fare la griglia per condizione + o -

es. se OPbuy + griglia = OPbuy

se OPbuy - griglia = OPsell

lo stesso per OPsell

C. se profitto > 0 && profitto > profitto minimo (chiusura del profitto)

fermare qualsiasi ordine ( OP buy || OP sell ) e spostare il trailing equity o il punto di profitto

D. chiudere per profitto può essere per equity o per punto

E. formato .mq4 perché voglio sapere dov'è il mio errore

Ho un problema sul punto B. per favore aiutatemi

Che ne dite di inviare il codice sorgente invece di ex4?

 
figurelli:
Che dire di inviare il codice sorgente invece di ex4?

Mostrami solo come codificarlo,

questo è il mio ultimo dettaglio

fissare questo.rar

Spero che possa capire il mio EA, il problema che loop su OP vendere perché?

 

domanda sullalinea di tendenza

Nuovo nella codifica e solo per fare pratica, volevo fermare una linea di tendenza alla barra corrente. Quello che mi è venuto in mente è di cambiare semplicemente il colore di essa alla barra corrente nel colore dello sfondo. In sostanza, semplicemente fondendo la linea oltre la barra nello sfondo e facendola scomparire a quel punto.

Così ora chiedo agli esperti quale fosse il modo corretto di farlo. So che ci sono molti modi per realizzare la stessa cosa, quindi sto solo cercando di vedere altre idee su cosa avrei potuto fare, nel tentativo di imparare di più.

Grazie

 

Comportamento molto strano del codice MQL

Ciao a tutti,

Versione Metatrader: 4.00 Build 224 (15 maggio 2009)

Versione Metaeditor: 4.00 Build 224 (14 maggio 2009)

Ho riscontrato un bug molto strano in MQL che mi ha lasciato completamente perplesso, tanto che sto riesaminando TUTTO il mio vecchio codice per assicurarmi che sia stato scritto per evitare questo problema.

Spero che qualcuno possa far luce su ciò che sta succedendo esattamente.

Ecco il codice, un semplice indicatore che essenzialmente non fa nulla. Tuttavia nella sezione init() ho messo una chiamata a 2 funzioni quando il periodo del grafico è H1.

Le due funzioni sono identiche in tutto tranne che in un aspetto. Una ha un array int statico definito e l'altra ha un array int non statico definito. Tutto quello che le funzioni fanno è stampare la dimensione del suo array definito localmente, assegnare alcuni valori agli elementi dell'array e poi stamparli.

#property indicator_chart_window

void afunc() {

int i;

int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc array[4] size="+ArraySize(array));

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

Print("afunc array["+i+"]="+array);

}

}

void afunc_static() {

int i;

static int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc_static array[4] size="+ArraySize(array));

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

Print("afunc_static array["+i+"]="+array);

}

}

int init() {

if (Period() == PERIOD_H1) {

afunc();

afunc_static();

}

return(0);

}

int deinit() {

return(0);

}

int start() {

return(0);

}

Se guardate il codice non ci dovrebbe essere nessuna circostanza in cui le due funzioni si comportano diversamente l'una dall'altra.

Tuttavia, se collego l'indicatore a un grafico M5 e poi passo al timeframe H1 ottengo il seguente output.

2009.05.23 18:12:47 afunc EURUSD,H1: initialized

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[3]=103

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[2]=102

23.05.2009 18:12:47 afunc EURUSD,H1: array afunc_static[1]=101

23.05.2009 18:12:47 afunc EURUSD,H1: array afunc_static[0]=100

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[4] size=4

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[3]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[2]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[1]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[0]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[4] size=0

2009.05.23 18:12:47 afunc EURUSD,M5: uninit reason 3

23.05.2009 18:12:47 afunc EURUSD,M5: deinizializzato

23.05.2009 18:12:45 afunc EURUSD,M5: inizializzato

2009.05.23 18:12:43 afunc EURUSD,M5: caricato con successo

Notate che anche se ho definito 'int array[4]' in afunc() la dimensione di questo array è effettivamente ZERO e non posso assegnare valori agli elementi dell'array. Questa funzione ovviamente non funziona come previsto.

Notate che ho definito 'static int array[4]' in afunc_static() e la dimensione è correttamente mostrata come 4 così come i valori che ho assegnato agli elementi dell'array. Questa funzione funziona bene.

In conclusione. Se definite un array non statico in una funzione e se questa funzione non viene chiamata dal vostro indicatore, allora potreste avere un problema.

Se successivamente cambiate il timeframe del grafico e poi chiamate la funzione, la dimensione di qualsiasi array definito localmente nella funzione sarà zero, indipendentemente da come avete definito la dimensione degli array.

L'unico modo per aggirare questo problema, per quanto posso vedere, è assicurarsi che tutti gli array definiti localmente nelle vostre funzioni siano definiti come array statici. Nuts lo so, ma non riesco a vedere nessun altro modo per evitare il problema.

Apprezzerei davvero qualsiasi feedback su questo problema.

Saluti,

Laurence.

File:
afunc.mq4  1 kb