Chiedete! - pagina 11

 

Stai parlando di avere uno script o qualcosa che faciliti come un server per far sì che gli EA possano comunicare. Penso che ci vorrà un po' di tempo prima che metaquote arrivi con qualcosa del genere. Comunque guardando mql4.com, dicono che la funzione di cui stavo parlando, GlobalVariableSetOnCondition() è atomica nell'esecuzione. Con questo, probabilmente posso venire con una serie di funzioni per fare ciò di cui ho bisogno.

 

Qualcuno può aiutarmi: https://www.mql5.com/en/forum/174184?

 

Aiuto - Dividere lo zero?

Ciao a tutti i codificatori...

Cosa devo fare per risolvere questo errore: zero divide?

Grazie per qualsiasi aiuto...

File:
ok.gif  16 kb
error.gif  16 kb
ttm_stoch.mq4  5 kb
 

jma

ciao codersguru,

posso usare jma invece di ema nel codice EA?

 
 

bisogno di aiuto - MACD regolato

Sto cercando di creare un indicatore che regoli la linea di segnale in base al valore di RSI. In realtà vorrei disegnare un'altra linea di segnale sul MACD che viene regolata e lasciare la linea di segnale regolare al suo posto.

modifica:

Ho ottenuto che l'indicatore disegni la linea RSI (primo passo) nella stessa finestra. Ma per qualche motivo non disegna l'ultimo periodo. Si prega di vedere l'allegato.

File:
 

qualsiasi aiuto sarebbe fantastico

herel è un po 'di codice im avendo un problema con//// funziona quando lo carico su northfinace 1 volta poi non fa mai un commercio di nuovo ... ma non fa nulla su Interbank ... si tratta di un sistema di inversione utilizzando kama il .0005 è inversione pips ... Non ho idea cosa sta succedendo, come ha fatto 1 commercio su northfinance perfettamente quando ho caricato la prima volta, ma era un commercio esistente che avrebbe già dovuto essere fatto ...

 

il codice

#proprietà copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;;

extern double Lots = 1;

extern int Slippage = 3;

extern bool StopLossMode = True;

extern int StopLoss = 40;

extern bool TakeProfitMode = False;

extern int TakeProfit = 60;

extern bool TrailingStopMode = True;

extern int TrailingStop = 35;

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

int BarCount;

int Current;

bool TickCheck = False;

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

//| funzione di inizializzazione esperto |

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

int init() {

BarCount = Bars;

se (EachTickMode) Current = 0; altrimenti Current = 1;

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit() {

return(0);

}

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

//| funzione di avvio esperto |

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

int start() {

int Ordine = SIGNAL_NONE;

int Total, Ticket;

doppio StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Totale = OrdiniTotali();

Ordine = SIGNAL_NONE;

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

//| Variabile Inizio |

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

double Var1 = iCustom(NULL, 0, "KAMATEST", 3, 2, 0.0005, 0, Current + 0);

double Var2 = iCustom(NULL, 0, "KAMA CCI", 14, 0, Current + 0);

double Var3 = iCustom(NULL, 0, "KAMARSI", 14, 0, Current + 0);

doppio Buy1_1 = Var1 ;

double Buy1_2 = 25;

double Buy2_1 = Var2 ;

double Buy2_2 = 80;

doppio Buy3_1 = Var3 ;

double Buy3_2 = 50;

doppio Vendere1_1 = Var1 ;

double Vendere1_2 = -25;

double Vendere2_1 = Var2 ;

double Vendere2_2 = -80;

double Vendere3_1 = Var3 ;

double Sell3_2 = -50;

double CloseBuy1_1 = Var1 ;

double CloseBuy1_2 = -25;

double CloseBuy2_1 = Var2 ;

double CloseBuy2_2 = -80;

double CloseBuy3_1 = Var3 ;

double CloseBuy3_2 = -50;

double CloseSell1_1 = Var1 ;

double CloseSell1_2 = 25;

double CloseSell2_1 = Var2 ;

double CloseSell2_2 = 80;

double CloseSell3_1 = Var3 ;

double CloseSell3_2 = 50;

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

//| Fine della variabile

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

//Controlla la posizione

bool IsTrade = Falso;

for (int i = 0; i < Totale; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Chiudere

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

//| Segnale Inizio(Esci Compra) |

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

if (CloseBuy1_1 <= CloseBuy1_2 && CloseBuy2_1 <= CloseBuy2_2 && CloseBuy3_1 <= CloseBuy3_2) Order = SIGNAL_CLOSEBUY;

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

//| Segnale End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuare;

}

//Trailing stop

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Punto * TrailingStop) {

if(OrderStopLoss() < Bid - Punto * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continua;

}

}

}

} else {

//Chiudi

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

//| Segnale Inizio(Esci Vendi) |

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

if (CloseSell1_1 >= CloseSell1_2 && CloseSell2_1 >= CloseSell2_2 && CloseSell3_1 >= CloseSell3_2) Order = SIGNAL_CLOSESELL;

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

//| Segnale End(Exit Sell) |

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

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuare;

}

//Trailing stop

if(TrailingStopMode && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Punto * TrailingStop)) {

if((OrderStopLoss() > (Ask + Punto * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continuare;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

if (Buy1_1 >= Buy1_2 && Buy2_1 >= Buy2_2 && Buy3_1 >= Buy3_2) Ordine = SIGNAL_BUY;

se (Sell1_1 <= Sell1_2 && Sell2_1 = Sell3_2) Ordine = SIGNAL_SELL;

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

//| Fine del segnale |

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

//Compra

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Controlla il margine libero

if (AccountFreeMargin() < (1000 * Lotti)) {

Print("Non abbiamo soldi. Margine libero = ", ContoFreeMargin());

return(0);

}

if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; altrimenti StopLossLevel = 0,0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; altrimenti TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

se(Biglietto > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Ordine BUY aperto : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Errore nell'apertura dell'ordine BUY: ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Vendere

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Controlla il margine libero

if (AccountFreeMargin() < (1000 * Lotti)) {

Print("Non abbiamo soldi. Margine libero = ", ContoFreeMargin());

return(0);

}

if (StopLossMode) StopLossLevel = Bid + StopLoss * Point; altrimenti StopLossLevel = 0,0;

se (TakeProfitMode) TakeProfitLevel = Bid - TakeProfit * Point; altrimenti TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

se(Biglietto > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Ordine SELL aperto : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Errore nell'apertura dell'ordine SELL: ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

 

Ho cambiato il valore di .0005 dell'indicatore nell'esperto, dato che mostra solo la linea del canale, alla fine i livelli sono quelli che devi cambiare 25,-25 per .0005 ...30,,-30 per .0006, e così via...

 

Problema con breakeven e trailing stop

Salve,

Sto imparando a programmare usando il tutorial MQL4 di Codersguru, e sto lavorando a "My_First_EA". E' davvero il mio primo EA. Funziona molto bene, ma sto cercando di scrivere uno stop di pareggio e non riesco a capirlo. Il problema che ho è che il breakeven stop segue il prezzo proprio come un trailing stop. Vorrei che lo stoploss iniziale si muovesse per mantenere 1 pip di profitto quando faccio 15 pips (per esempio), poi voglio che lo stoploss rimanga allo stop di pareggio (1 pip di profitto) fino a quando il trailing stop inizia a lavorare a 25 pips di profitto. Poi voglio che il trailing stop lavori come al solito spostando ogni pip di profitto. Penso che il problema potrebbe essere il "OrderStopLoss()", ma non so più nulla. Il mio cervello è una poltiglia. Grazie

Ecco il codice pertinente che ho fatto:

extern double TrailingStop=25.0;

extern double BreakEvenProfit=15;

extern double BreakEvenStop=1;

......................

il mio codice di entrata e di apertura degli ordini qui funziona bene

......................

for (cnt=0;cnt<totale;cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType()<=OP_SELL&&&OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY)//Long position is opened

{

//deve essere chiusa?

if (FSAR > FMA) //segnale di uscita

{

//----CLOSE LONG POSITION funziona bene

OrderClose(OrderTicket(),OrderLots(),Bid,3,Magenta);

return(0);//uscita

}

////////////////////QUESTA È L'AREA PROBLEMATICA SOTTOSTANTE/////////

//----CONTROLLARE IL PAREGGIO DELLA POSIZIONE LUNGA DI STOP------

se (Bid-OrderOpenPrice() > BreakEvenProfit*Point)

{

se (OrderStopLoss() < OrderOpenPrice()+ BreakEvenStop*Point)

{

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BreakEvenStop*Point,OrderTakeProfit(),0,Yellow);

return(0);

}

}

//-----TUTTO QUI SOTTO FUNZIONA COME UN TIPICO TRAILING STOP

//----controllo per trailing stop POSIZIONE LUNGA

se(TrailingStop>0)

{

if (Bid-OrderOpenPrice()>Point*TrailingStop)

{

se (OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Yellow);

return(0);

}

}

}

}

else//passa alla posizione short

Motivazione: