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
Usare file esterni *.set
Ho provato e riprovato ma non riesco a capirlo, quindi spero che qualcuno possa vedere l'albero attraverso la foresta.
Voglio programmare un EA per usare o le sue impostazioni programmate o un file *.set esterno.
Quindi se:
extern bool UseExternSet = true;
userà le impostazioni nel file set esterno piuttosto che le impostazioni programmate.
So che può essere fatto ma semplice perso qui.
Qualsiasi esempio ea farà
Bernard
Problema di compilatore o problema di codice?
extern int ma1method=1;
extern int ma1tf=0;
extern int ma2period=5;
extern int ma2method=1;
extern int ma2tf=10080;
extern double lots=1;
int init(){}
int deinit(){}
double CMA (int tf,int period, int shift, int method)
{
double MA=iMA(NULL,tf,period,0,method,0,shift)
return(MA)
}
int start()
{
int BarsCount=0;
if (Bars> BarsCount)
{
BarsCount=Bars;
double ma1.1=CMA(ma1tf,ma1period,1,ma1method);
double ma1.2=CMA(ma1tf,ma1period,2,ma1method);
double ma2.1=CMA(ma2tf,ma2period,1,ma2method);
double ma2.2=CMA(ma2tf,ma2period,2,ma2method);
bool ma1upsignal =ma1.2<ma1.1;
bool ma1downsignal =ma1.2>ma1.1;
bool ma2upsignal =ma2.2<ma2.1;
bool ma2downsignal =ma2.2>ma2.1;
if (ma1upsignal&&ma2upsignal)
{
OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Green);
}
if (ma1downsignal&&ma2downsignal)
{
OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Green);
}
if ((ma1upsignal&&ma2downsignal)||(ma1downsignal&&ma2upsignal))
{
int total=OrdersTotal(); //Script to close all open orders.
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
switch(type)
{
//Close opened long positions
case OP_BUY : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;
//Close opened short positions
case OP_SELL : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
}
}
}
}
Questo è il pezzo di codice su cui sto lavorando. Il compilatore dice "la variabile BarsCount non è definita". Cosa devo fare? Per quanto posso vedere, la variabile è stata inizializzata e le è stato dato un valore.
È un problema del mio compilatore o un problema di codice?
[CODICE]
doppio CMA (int tf,int periodo, int shift, int metodo)
{
double MA=iMA(NULL,tf,period,0,method,0,shift);
return(MA);
}
[CODICE]
doppio CMA (int tf, int periodo, int shift, int metodo)
{
double MA=iMA(NULL,tf,period,0,method,0,shift);
return(MA);
}Michel,
Grazie. Questo ha risolto il problema :-)
Conteggio di barre consecutive
Qualcuno ha del codice su come contare le barre consecutive di acquisto/vendita in una fila? Voglio contare quante volte su un grafico (inserire il numero di barre da controllare) ci sono 1 barra di vendita in una riga, 32 barre di vendita in una riga, 3 barre di vendita in una riga, 4 barre di vendita in una riga (lo stesso w / buy) ecc.
So che devo fare un loop, ma non riesco a capire come.
I risultati possono andare in un Comment().
Grazie.
Perché il mio programma non funziona?
Ho scritto un semplice programma.
Si suppone che entri solo un ordine alla volta e che esca con un take profit o uno stop loss.
E' impostato per M30 su GBPUSD.
Cioè: alcune delle costanti sed nel programma sono trovate da stime "a occhio". Questo non dovrebbe influenzare molto il programma... non funziona nemmeno con costanti diverse. (Almeno, quando testato con lo Strategy Tester, impostato su veloce o medio: non "tick by tick". (troppo lento...)
Comunque il programma, quando testato, non inserisce un ordine e non controlla mai nella direzione "up". (Questo, tramite il "print"/trace)
(dovrebbe controllare: entrare con un acquisto o entrare con una vendita)
Logica incidentale: controlla 2 barre consecutive. Se la barra 1 ha entrambi: un massimo più alto e un minimo più alto, il programma pensa che la prossima barra sarà al rialzo.
(Simmetricamente al ribasso).
Take profit e stop loss sono impostati di conseguenza.
Il programma non funziona anche quando le istruzioni "if" sono annidate....
Grazie per aver dato un'occhiata a questo.
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{
//----
bool TrendUp1; double TakeProfitUp; double EE = .00500;
bool OrdTot_OK;double lot;double slip;
double SL_Trailing_Up;bool High2Up;bool Low2Up;
int ticketup;int ticketdown;bool DownAndBig; bool UpAndBig;
bool TrendDown; double SL_Trailing_Down; double TakeProfitDown;
bool High2down; bool Low2down;
int ABC = OrdiniTotali();
double Size1 = .00630; bool BigUp; double A = High[1]; double B= Low[2]; //41
double C= High[2]; double D= Low[1];bool BigDown;
//------------------------------------down inizio ordine
if (ABC == 0)// nessun ordine in uscita è vero
OrdTot_OK = true;
se (ABC == 0)// nessun ordine in uscita è vero
Stampa ("sulla sequenza di ordini al ribasso, nessun ordine in uscita");
if ((C-D) > Size1)//alto di 2 meno basso di 1 > .0063
BigDown = true;
se ((C-D) > Size1)//alto di 2 meno basso di 1 > .0063
Stampa ("sulla sequenza di ordini al ribasso, trovato un grande breakout al ribasso");
se (Alto[1]< Alto[2])
High2down=true;
se (Alto[1]< Alto[2])
Stampa ("sulla sequenza di ordini al ribasso, le barre consecutive hanno massimi decrescenti");
se (Basso[1]< Basso[2])
Low2down=true;
se(Basso[1]< Basso[2])
Stampa ("sulla sequenza di ordini al ribasso, le barre consecutive hanno minimi decrescenti");
if (High2down && Low2down)
TrendDown=vero;
se (High2down && Low2down)
Stampa ("sulla sequenza di ordini al ribasso, il flag TrendDown è impostato");
se (TrendDown)
SL_Trailing_Down = High[1];
se (TrendDown)
Stampa ("sulla sequenza di ordini al ribasso, ha impostato lo stop_loss");
se (TrendDown)
TakeProfitDown = Bid - (.005);
se (TrendDown)
Stampa ("sulla sequenza di ordini al ribasso, ha ottenuto un takeprofit", TakeProfitDown);
se (TrendDown && BigDown)
DownAndBig = true;
if (DownAndBig && OrdTot_OK)
ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue);
if (DownAndBig && OrdTot_OK)
Stampa ("sulla sequenza di ordini al ribasso, ha cercato di inserire un biglietto", ticketdown);
se (ticketdown < 0)
Print("OrderSend_Down fallito con errore #",GetLastError());
return(0);
//----------------------------------------------down order done
//---------------------------------------------------up order start
se (ABC == 0)
OrdTot_OK = true;
se (ABC == 0)
Stampa ("sulla sequenza in salita, nessun ordine è uscito");
se ((A - B) > Dimensione1)
BigUp = true;
se ((A - B) > Size1)
Stampa ("sulla sequenza in salita, il test delle dimensioni per le due barre era ok");
se (Alto[1] > Alto[2])
High2Up = true;//44
se (Alto[1] > Alto[2])
Stampa ("sulla sequenza in salita, il test per i massimi crescenti era ok");
if(Basso[1] > Basso[2])
Low2Up=vero;
se(Basso[1] > Basso[2])
Stampa ("sulla sequenza in salita, il test per i minimi crescenti era ok");
if (High2Up && Low2Up)
TrendUp1=vero;
if (High2Up && Low2Up)
Stampa ("sulla sequenza di salita, ha impostato il flag per la salita");
se (TrendUp1)
SL_Trailing_Up = Low[1] ;
se (TrendUp1)
Stampa ("sulla sequenza in salita, stabilito lo stoploss");
se (TrendUp1)
TakeProfitUp = Ask + (.005);
se (TrendUp1)
Stampa ("sulla sequenza in salita, stabilito il takeprofit", TakeProfitUp);
se (TrendUp1 && BigUp)
UpAndBig = true;
se ( UpAndBig && OrdTot_OK)
ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);
se (UpAndBig && OrdTot_OK)
Stampa ("sulla sequenza in salita, ha cercato di inviare un ordine", ticketup);
se (ticketup < 0)
Print("OrderSend_Up fallito con errore #",GetLastError());
return(0);
//-------------------------------------------------up order done
//----
return(0);// non sono sicuro di questa linea
//+------------------------------------------------------------------+
//----
return(0);
}
//+------------
Barre minime prima/dopo il commercio
Ciao,
Ciao, sono nuovo di MT4. Qualcuno potrebbe farmi sapere come posso inserire una restrizione in un EA che richiede un minimo di "x" barre per aprire una nuova posizione o chiuderne una precedente?
(senza usare il comando sleep)
Saluti.
aiuto alla codifica mql
se (iMA(NULL, 0, 24, 0, MODE_LWMA, PRICE_WEIGHTED, 1) > iMA(NULL, 0, 120, 1, MODE_LWMA, PRICE_WEIGHTED, 1)) gi_268 = 2;
---------------------------------------------------------------
cosa significa?
2 LWMA utilizzati ?
LWMA periodo =24 shift =0 su prezzo ponderato (hcll4) cross over LWMA periodo 120 shift =1 su prezzo ponderato (hcll4) poi comprare o vendere ??
Problema con la posizione di chiusura
Salve,
Ho appena iniziato con il mio nuovo EA e l'apertura delle posizioni è OK, ho impostato tp e sl. L'EA apre e chiude le posizioni 1 per 1 e non ci sono mai più di 1 ordine. Ma vorrei chiudere la posizione se alcuni indicatori mi avvisano prima del limite di sl o tp.
Se provo a fare qualcosa del genere:
for (int i=1; i<=OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, 2)) {
if (OrderSymbol()==Symbol()) {
Ans=OrderClose(OrderTicket(),alLots,Bid,2);// Order closing
}
}
}[/CODE]
Nothing happened. Doesn't find any opened positions and I know there is 1.
If I try something like this:
for (int i=1; i<=OrdersTotal(); i++) {
CloseOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_LOTS),Bid,3);
}Compiler report error message that VAL_TICKER and VAL_LOTS are not defined and in examples I found they are nowhere declared.
If I try direcly by number to close:
[CODE]
Ans=OrderClose(0,alLots,Bid,2);// Order closingOttengo il messaggio di errore 4107 o 4105 che il ticker non è valido
Qualcuno può controllare questo e il mio ea in allegato e aiutare per favore?
Grazie mille
iMassimo iMinimo Chiarimento
Supponiamo 3 barre: Barra [2], barra [1] e barra [0] (corrente).
La seguente funzione "stop_low()" è corretta per trovare il minimo più basso delle barre [2] e [3] ?
doppio stop_low = iLowest(Symbol(),0,1,2,1);
------------------------------------------------------------
Riferimento:
int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)
Restituisce lo spostamento del valore minimo su un numero specifico di periodi a seconda del tipo.
Parametri:
symbol - Simbolo i cui dati devono essere usati per calcolare l'indicatore. NULL significa il simbolo corrente.
timeframe - Timeframe. Può essere uno qualsiasi dei valori dell'enumerazione Timeframe. 0 significa il timeframe corrente del grafico.
type - Identificatore dell'array di serie. Può essere uno qualsiasi dei valori di enumerazione degli identificatori di serie.
count - Numero di periodi (in direzione dalla barra iniziale a quella posteriore) su cui viene effettuato il calcolo.
start - Spostamento che mostra la barra, relativa alla barra corrente, da cui i dati devono essere presi.
Esempio:
// calcolo del valore più basso sulle 10 barre conseguenti nell'intervallo
// dal 10° al 19° indice compreso sul grafico corrente
double val=Low;