![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ciao.
Non vedo l'ora di imparare i tuoi trucchi e di mostrarti i miei.
Ciao, non vedo l'ora di imparare i tuoi trucchi e di mostrarti i miei.
Troverai un sacco di cose fantastiche su questo forum.
Leggi e usa la funzione di ricerca senza alcuna restrizione!!!
Sentiti libero di chiedere qualsiasi cosa ... Un sacco di grandi collaboratori/aiutanti qui.
FerruFx
In questo codice, ha il trailing stop impostato per 45 pip. Ma il trailing stop non sembra attivarsi finché non si muove di 45 pip. Come dovrei cambiarlo per avere il trailing stop attivato quando il trade è piazzato?
extern string Remark1 = "== Main Settings ==";
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = true;
extern double Lots = 4;
extern int Slippage = 2;
extern bool UseStopLoss = false;
extern int StopLoss = 100;
extern bool UseTakeProfit = false;
extern int TakeProfit = 15;
extern bool UseTrailingStop = true;
extern int TrailingStop = 45;
extern bool MoveStopOnce = False;
extern int MoveStopWhenPrice = 50;
extern int MoveStopTo = 1;
extern int MaxConcurrentTrades = 2;
//Version 2.01
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal 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 = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderStopLoss() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal 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 = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(((OrderStopLoss - Ask) > (Point * TrailingStop)) || OrderStopLoss() == 0) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
Cambiato in rosso
Ho fatto le modifiche in rosso, ma ora l'EA non sembra voler funzionare. Vi posterò l'intero EA perché possiate dare un'occhiata. Grazie!
Assicurati di mettere () dopo orderstoploss
Fico, l'ha fatto!
Che ne dite di questo indicatore....
Potrebbe essere modificato in modo che i prezzi mostrino colori diversi a seconda di come si aprono? Ad esempio se si apre più in alto della barra precedente il prezzo sarebbe verde, se più in basso, allora rosso, e se anche allora giallo? Con questi colori selezionabili? Inoltre, si potrebbe estendere per mostrare 10 aperture invece di solo 6?
Inoltre sull'EA che abbiamo appena sistemato, come potrei mettere un'impostazione di input come "Pips to Activate Trailing Stop". Ho questo in un altro EA ma non sono sicuro di come codificarlo.
OrdineCommento()
BigliettoOrdine()
OrdinaLotti()
OrdineStopLoss()
PrendiProfitto()
OrderOpenTime()
Questi sono tutti potenziali strumenti di filtraggio degli ordini.
Cos'altro di queste specifiche operazioni le rende uniche?
OrdineCommento()
Biglietto d'ordine()
OrdinaLotti()
OrdineStopLoss()
PrendiProfitto()
OrderOpenTime()
Questi sono tutti potenziali strumenti di filtraggio degli ordini.
Cos'altro di quei mestieri specifici li rende unici?Due dei più importanti per filtrare gli ordini sono OrderSymbol() e OrderMagicNumber(). Un altro degno di nota è OrderComment().
L'idea migliore è quella di inserire uno di questi nel Metaeditor, poi cliccare sulla parola asnd e premere F1. Così facendo si visualizzerà l'aiuto e si elencheranno tutte le funzioni di ordine.
Buona programmazione,
Hiachiever
Uso di OrderComment
Fate attenzione quando usate OrderComment() per identificare le compravendite. A volte il broker aggiunge dei caratteri al commento.
È meglio usare
if (StringFind(OrderComment(), UserComment, 0) > 0)
{
// ordine identificato da UserComment trovato in OrderComment
}
invece di
if (OrderComment() == UserComment)
{
// l'ordine potrebbe essere identificato da UserComment
// se OrderComment non è stato modificato dal broker
}
Robert
Chiudere le transazioni su beakeven
..............