Come codificare? - pagina 237

 

Tieni presente che potresti aver bisogno di memorizzare continuamente anche lo spread... a seconda del tipo di EA che stai scrivendo. altrimenti inutile

 

è HIGH [0] -- la barra corrente che è appena iniziata

per basso, non so, forse basso[1]

 

Ordine giusto per mettere OrderSend(),OrderModify()

Giorni fa ho letto un argomento nel forum sulla funzione OrderSend() e OrderModify()

e questo argomento mi dà un indizio perché alcuni EA lavoro e altri no, e mi chiedo come controllare se la funzione OrderSend () e OrderModify () è scritto correttamente.

 

ciao a tutti...

Per favore ditemi come codificare per ottenere la lista di tutte le coppie in MT4?

grazie

Charles

 
sunshineh:
Ciao,

Ho capito che non è giusto scrivere Ask[1] ma come posso ottenere il prezzo Ask dall'ultimo tick?

Grazie!

Devi salvare i tick in tempo reale e poi accedervi dal tuo EA o indicatore. Potrei provare a codificare un esempio per te se sei ancora interessato.

 
DooMGuarD:
ciao a tutti...

Per favore ditemi come codificare per ottenere la lista di tutte le coppie in MT4?

grazie

Charles

Prenditi il tuo tempo amico,, credo che sia più facile da fare in Mql5 quindi aspetta solo che le cose si sistemino

 

ottenere valori di tendenza magici in una variabile...

ciao!

sto lavorando ad un EA e mi sto chiedendo come posso ottenere i valori dell'indicatore magic trend in una variabile. ovviamente non esiste una funzione nativa per il magic trend, come fa iMA per le medie mobili e so....

Finora sembra che io debba codificarlo da zero. ma non ho trovato alcuna informazione sulla matematica!

qualcuno potrebbe aiutarmi?

grazie mille!!!

 
atch3000:
ciao!

Sto lavorando ad un EA e mi sto chiedendo come posso ottenere i valori dell'indicatore magic trend in una variabile. ovviamente non esiste una funzione nativa per magic trend, come fa iMA per le medie mobili e so....

Finora sembra che io debba codificarlo da zero. ma non ho trovato alcuna informazione sulla matematica!

qualcuno potrebbe aiutarmi?

grazie mille!!!

Cerca informazioni su come utilizzare la funzione ICustom in MQL4. Con questa funzione è possibile chiamare indicatori esterni nel tuo EA

-guyver

 

Robot - EA automatico su 2 medie mobili MA veloci e lente

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 0.2;

extern int Slippage = 3;

extern bool UseStopLoss = True;

extern int StopLoss = 15;

extern bool UseTakeProfit = True;

extern int TakeProfit = 30;

extern bool UseTrailingStop = True;

extern int TrailingStop = 20;

int BarCount;

int Current;

bool TickCheck = Falso;

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

//| 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 = iMA("EURUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double Var2 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double Buy1_1 = iMA("EURUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double Buy1_2 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double Sell1_1 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double Sell1_2 = iMA("EURUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double CloseBuy1_1 = iMA("EURUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double CloseBuy1_2 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double CloseSell1_1 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

double CloseSell1_2 = iMA("GBPUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1);

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

//| 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 && False) Ordine = SIGNAL_CLOSEBUY;

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

//| Segnale Fine(Esci dall'Acquisto) |

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

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(UseTrailingStop && TrailingStop > 0) {

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

if(OrderStopLoss() < Bid - Point * 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_2False) Ordine = SIGNAL_CLOSESELL;

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

//| Segnale Fine(Esci Vendi) |

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

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(UseTrailingStop && 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 && False) Ordine = SIGNAL_BUY;

if (Sell1_1 < Sell1_2 && False) 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 (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; altrimenti StopLossLevel = 0,0;

if (UseTakeProfit) 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 (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; altrimenti StopLossLevel = 0,0;

if (UseTakeProfit) 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);

}

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

//dove è l'errore, perché non lo so, aiutami. grazie

 

che errore ottieni?

Motivazione: