Caratteristiche utili da KimIV - pagina 98

 
Ciao Igor! 09.05.2008 17:10 a pagina 17. 17 Avete descritto la funzione di correlazione. Potrebbe descrivere la funzione di correlazione usando la formula di Pearson
 

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"?

 
slavamir писал(а) >>

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!

slavamir ha scritto >>.

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"?

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?

 
Supponiamo che il parametro int lt prenda tre valori di flag nella funzione GetProfitFromDateInCurrency()
-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();
}
}
 
keekkenen писал(а) >>
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.

 
KimIV >>:

Функция TicketNearPos().

Эта функция возвращает тикет ближайшей к рынку позиции. В качестве критерия "близости" позиции выступает минимум расстояния в пунктах между ценой открытия позиции и текущей рыночной ценой. Отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции TicketNearPos().
if (pp == 0) 
{return (ti);}
Ho notato un bug nella funzione TypeNearPos quando la condizione è soddisfatta:
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().