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 Igor!
Potresti cambiare l'EA e-OpenByTime o scriverne uno nuovo, o suggerirne uno pronto :)))
Ho bisogno di un EA che metta le pause in diverse direzioni al tempo X di N punti dal prezzo!
Ciao, Igor!
Hai uno script che disegna segmenti di linea orizzontale a X e Y pip dal segnale?
Mi spiego: ci sono segnali di acquisto/vendita (incrocio di muwings, frattale, ecc.).
Lo script imposta 4 parametri, per esempio:
- 300 pips a Stop,
- 500 pips da prendere,
- 10 barre = lunghezza delle barre,
- dove e come prendere i segnali - riferimento all'indicatore di segnale, inserimento di condizioni per i segnali... Questo punto è qualcosa su cui riflettere!
Lo script disegna 2 linee su ogni segnale di acquisto:
1) il primo ("stop") inferiore di 300 pip dal prezzo di apertura della barra del segnale;
2) secondo ("Take") superiore di 500 punti dal prezzo di apertura della barra del segnale;
3) le linee iniziano sulla barra del segnale e finiscono sulla decima barra.
È lo stesso nel caso dei segnali Sell, solo che i rientri delle linee sono invertiti.
Penso che tale visualizzazione sarà utile per la stima preliminare del "segnale-arresto".
Saluti, Vadim.
Ciao Igor!
Domanda 1.
C'è un errore 138 nella vostra funzione OpenPosition() - ERR_REQUOTE viene messo in pausa:
if (err!=135) Sleep(1000*7.7);
Anche se nella documentazione si raccomanda di aggiornare i dati e riprovare subito (il prezzo parte, voglio aprire una posizione il prima possibile)).
Che sia corretto, allora:
if (err!=135 && err!=138) Sleep(1000*7.7);?
O forse mi manca qualcosa?
Domanda 2.
Vi prego di consigliarmi come specificare correttamente il parametro Slippage uguale a 5 punti nella funzione OrderSend() se la mia società di brokeraggio (Alpari) dà 5 cifre decimali.
- "50"?
- o "5"?
Domanda 1.
Nella vostra funzione OpenPosition() l'errore 138 - ERR_REQUOTE viene messo in pausa:
if (err!=135) Sleep(1000*7.7);
Anche se nella documentazione si raccomanda di aggiornare i dati e riprovare subito (il prezzo parte, voglio aprire una posizione il prima possibile)).
Che sia corretto, allora:
if (err!=135 && err!=138) Sleep(1000*7.7);?
Sì, va bene! Si può fare anche così... Grazie!
Domanda 2.
Per favore ditemi come impostare correttamente il parametro Slippage uguale a 5 punti nella funzione OrderSend() se la mia società di brokeraggio (Alpari) dà 5 posizioni decimali.
- "50"?
- O è "5"?
Ciao Igor,
potresti aiutare a perfezionare la tua funzione GetProfitFromDateInCurrency(). Mi serve per calcolare il profitto anche solo degli ordini chiusi. Uso la chiusura parziale (splitting) degli ordini e la funzione CloseBy per chiudere il saldo di un ordine esistente. Per determinare se un numero pari o dispari di ordini è stato chiuso, uso la formula:
double x, y; --------------------------------- Supponiamo
x=MathFloor(OrderLots()/0.02); --------- a. Se lotti 0.04/0.02=2 --- b. Se lotti 0.03/0.02=1
y=x*0.02; ---------- a. 2*0,02=0,04 --- б. 1*0.02=0.02
if (y==OrderLots()) ---------- а. 0.04==0.04 --- b. 0.02!=0.04
XLots=y; Se è uguale, allora XLots ottiene il valore di y
Questo funziona (non potevo pensare a un modo migliore di dividere in pari/dispari e non ho avuto un suggerimento quando ho chiesto).
Poi, la chiamata della funzione attuale (quella che ho fatto dalla tua)
ClOrdProf=GetProfitFromDateInCurrency("", -1, -1, XTime, XLots);
E il mio vano tentativo di aggiungere alla tua funzione la condizione che il profitto deve essere calcolato se i lotti sono pari:
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0, double lt=-1)
{
double p=0;
int i, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime()) {
if (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
}
}
return(p);
}
Non vuole contare.
1. Ho sbagliato da qualche parte nella funzione?
2. Il fatto che gli ordini siano chiusi da OrdCloseBy potrebbe avere un effetto?
-1 tutti gli ordini, 0 - lotti pari, 1 - lotti dispari, quindi
sostituire
if (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap()
}
a
if (lt == -1){
p+=OrderProfit()+OrderCommission()+OrderSwap();
} else {
int test = OrderLors() * 100;
if (lt == test % 2) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
} else {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
diciamo che nella funzione GetProfitFromDateInCurrency() il parametro int lt prende tre valori di bandiera
Grazie, il tuo metodo di calcolo del lotto per modulo è corretto, lo userò più tardi... Ma qui è interessante, si scopre che la funzione che ho raffinato funziona... in un certo senso. Ho aggiunto Alert per vedere i cambiamenti di "p+=" e calcola tutto correttamente. Ma il valore ClOrdProf da cui prenderemo informazioni non apparirà: Alert ("ClOrdProf= ",ClOrdProf);. Nel codice appare così:
int start()
{
........................
bool
ClOrdProf=false; //valore logico
........................
ClOrdProf=GetProfitFromDateInCurrency(",-1,-1,XTime,XLots); /chiamata della funzione
se (ClOrdProf==true)
Alert ("ClOrdProf=",ClOrdProf); - non è aggiornato nel log
.........................
return; //uscita da start()
}
// Funzione per calcolare il profitto degli ordini chiusi
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0, double lt=-1)
{
doppio p=0;
int i, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
per (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
se ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (mn<0 || OrderMagicNumber()==mn) {
se (dt<OrderCloseTime()) {
se (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
Alert ("p= ", p); - aggiornato nel log
}
}
}
}
}
}
}
ritorno(p);
}
Non riesco a capire cosa c'è che non va...
Divertente, vero, divertente... divertente per te e anche per me...(Vladimir Semyonovich)
Originariamente ClOrdProf non è un bool ma un double. E ci dovrebbe essere "if (ClOrdProf>0 || ClOrdProf<0)" - la seconda parte, che inizia con "o", per il conteggio in caso di profitto negativo... quello che io chiamo "occhio lavato" - non ho visto subito quello che c'è in superficie.
Grazie a keekkenen per l'aiuto nel calcolo dei lotti pari/dispari.
Grazie a Igor, per la possibilità di aggiornare la sua funzione.
Функция TicketNearPos().
Эта функция возвращает тикет ближайшей к рынку позиции. В качестве критерия "близости" позиции выступает минимум расстояния в пунктах между ценой открытия позиции и текущей рыночной ценой. Отбор учитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции TicketNearPos().Prezzo di mercato = prezzo dell'ordine aperto, allora questo ordine non è più preso in considerazione da questa funzione.
Ho dovuto aggiungere questa semplice condizione al codice.
Questa condizione aiuterà anche nelle funzioni simili TypeNearPos() e PriceOpenNearPos().