Come codificare? - pagina 110

 

Ciao.

Non vedo l'ora di imparare i tuoi trucchi e di mostrarti i miei.

 
CodeMuncher:
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

 
fireslayer26:
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!

File:
williams_ea.mq4  12 kb
 

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.

File:
period_open.mq4  23 kb
 

OrdineCommento()

BigliettoOrdine()

OrdinaLotti()

OrdineStopLoss()

PrendiProfitto()

OrderOpenTime()

Questi sono tutti potenziali strumenti di filtraggio degli ordini.

Cos'altro di queste specifiche operazioni le rende uniche?

 
Ronald Raygun:
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

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