Caratteristiche utili da KimIV - pagina 71

 
È necessario numerare separatamente i frattali superiori e inferiori. Nei parametri della funzione, specificate il tipo UPPER o LOWER e il numero frattale. A proposito, se si numerassero separatamente le pieghe superiori e inferiori quando si cercano i punti di inflessione a zig zag, sarebbe più comodo da usare.
 
KimIV писал(а) >>

Sì, non c'è... Perché non riuscivo a decidere come numerare tali frattali:

E se qualcosa del genere non contasse come una formazione frattale? Un'opzione?

 
kombat. Non sono d'accordo con questa opzione. Il fatto è che proprio quando ci sono due frattali sulla stessa barra, è un segno della nota figura "lente", talvolta chiamata "diamante". Pertanto questa cifra può essere pescata nell'Expert Advisor da questo segno.
 
Domanda a Docs e Igor = È possibile costruire l'indicatore "Profitto" o "Fondi" come una linea continua dal tempo (di diversi Т\F) in una finestra separata dal tempo (significato - controllo della performance del portafoglio in dinamica)... Purtroppo, c'è un indicatore sul sito di Igor, ma è sotto forma di una tabella e statico ... (o forse c'è uno - dammi un link) ....
 
khorosh писал(а) >>
kombat. Non sono d'accordo con questa opzione. Il fatto è che proprio quando ci sono due frattali su una barra, è un segno della nota figura "lente", talvolta chiamata "diamante". Pertanto questa cifra può essere pescata nell'Expert Advisor da questo segno.

Per la definizione SÌ, ma per la numerazione, che è ciò di cui si tratta...

 
nuj >> :
Domanda a Docs e Igor = È possibile costruire un indicatore "Profitto" o "Fondi" come una linea continua dal tempo (di diversi Т\F) in una finestra separata dal tempo (significato - controllo della performance del portafoglio in dinamica)... Purtroppo, c'è un indicatore sul sito di Igor, ma è sotto forma di una tabella e statico ... (o forse c'è uno - dammi un link) ....

cerca nel forum

File:
equity_v7.mq4  17 kb
 

e chiedere se avete un consulente che:

1. raccoglie tutte le posizioni aperte.

2. imposta uno stop a zero perdite.

3.trawl

4. chiude le posizioni in tre livelli. per esempio:

Lotto uguale a 1.

Exit 1 - si chiude il 50% del lotto, ad esempio 30 pip dal prezzo di apertura.

2 way out - il 30% del lotto è chiuso, per esempio 70 punti dal prezzo aperto.

3 vie d'uscita - il 20% del lotto è chiuso, per esempio sull'incrocio MA.

Grazie.

 

Buon pomeriggio, Potreste dirmi come implementare la funzione NumberOfBarOpenLastPos in questo semplice Expert Advisor,

in modo che un ordine sia attivato una volta per barra... Ho messo la funzione nel codice, ma non funziona niente...

//--------------------------------------------------------------------
// tradingexpert.mq4
//
//--------------------------------------------------------------------
#property copyright "Copyright © Book, 2007"
#proprietà link "http://AutoGraf.dp.ua"
//--------------------------------------------------------------- 1 --
// Valori numerici per M15
extern double StopLoss =200; // SL per l'ordine aperto
extern double TakeProfit =10; // TP per l'ordine aperto
extern intern Period_MA_1=11; // Periodo MA 1
extern int Period_MA_2=31; // Periodo MA 2.
extern double Rastvor =28.0; // Distanza tra le MA.
extern double Lots =0.1; // Numero fisso di lotti.
extern double Prots =0.07; // Percentuale di fondi liberi

bool Work=true; // Expert Advisor funzionerà.
string Symb; // Nome dello strumento finanziario
//--------------------------------------------------------------- 2 --
int start()
{
int
Totale, // Numero di ordini nella finestra
Tip=-1, // Tipo di ordine selezionato (B=0,S=1)
Biglietto; // Numero d'ordine
doppio
MA_1_t, // Valore. MA_1 valore corrente
MA_2_t, // valore MA_2_t. MA_2_t valore corrente, // valore MA_2_t.
Lotto, //Numero del lotto nell'ordine attualmente selezionato
Lts, //Numero di lotti in un ordine aperto
Min_Lot, // Numero minimo di lotti
Passo, // Passo della modifica della dimensione del lotto
Libero, // Fondi correnti liberi
One_Lot, // Valore di un lotto
Prezzo, // Prezzo dell'ordine selezionato
SL, // prezzo SL dell'ordine selezionato
TP; // TP dell'ordine selezionato
bool
Ans =false, // risposta del server dopo la chiusura
Cls_B=false, // Criteri di chiusura di Buy
Cls_S=false, // Criterio di chiusura Vendi
Opn_B=false, // Criterio di apertura di Buy
Opn__S=false; // criterio di apertura di Sell
//--------------------------------------------------------------- 3 --
//Preelaborazione
if(Bars < Period_MA_2) // Non ci sono abbastanza barre
{
Alert("Non ci sono abbastanza barre nella finestra, l'Expert Advisor non funziona");
return; // Esci da start()
}
if(Work==false) // Errore critico.
{
Alert("Errore critico. Expert Advisor non funziona");
return; // Esci da start()
}
//--------------------------------------------------------------- 4 --
// Conteggio degli ordini
Symb=Symbol(); // Nome dello strumento finanziario.
Total=0; // Numero di ordini
for(int i=1; i<=OrdersTotal(); i++) // ciclo degli ordini
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // Se
{ // Analisi dell'ordine:
if (OrderSymbol()!=Symb)continue; // Non è il nostro strumento finanziario
if (OrderType()>1) // Abbiamo un ordine in sospeso
{
Alert("Ordine in sospeso rilevato. Expert Advisor non funziona;)
return; // Exit()
}
Totale++; // Contatore degli ordini di mercato
if (Totale>1) // Non più di un ordine
{
Alert("Diversi ordini di mercato. L'Expert Advisor non funziona;)
return; // Exit()
}
Ticket=OrderTicket(); // Numero d'ordine selezionato.
Tip =OrderType(); // Tipo di ordine selezionato.
Price =OrderOpenPrice(); // Prezzo dell'ordine selezionato.
SL =OrderStopLoss(); // SL dell'ordine selezionato.
TP =OrderTakeProfit(); // TP dell'ordine selezionato.
Lot =OrderLots(); // Numero di lotti
}
}
//--------------------------------------------------------------- 5 --
// Criteri commerciali
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_2

se (MA_1_t > MA_2_t + Rastvor*Point) // se la differenza tra
{ // ...MA1 e 2 è grande
Opn_B=true; // Aprire il criterio di acquisto
Cls_S=true; // Chiudere il criterio Vendere
}
if (MA_1_t < MA_2_t - Rastvor*Point) // Se la differenza tra
{ // ...MA_1 e 2 è grande
Opn_S=true; //aprire il criterio di vendita
Cls_B=true; //Criteri di clic Compra
}
//--------------------------------------------------------------- 6 --
// Chiudere gli ordini
while(true) //Ordine di chiusura del ciclo.
{
if (Tip==0 && Cls_B==true) //Open Buy order.
{ //c'è un criterio di chiusura
Alert("Cercando di chiudere l'acquisto ",Ticket,";)
RefreshRates(); // Aggiorna i dati
Ans=OrderClose(Ticket,Lot,Bid,2); // Chiudi Acquisto
if (Ans==true) // Ha funzionato :)
{
Avviso ("Ordine di acquisto chiuso",Biglietto;)
break; // Esci dal ciclo di chiusura
}
if (Fun_Error(GetLastError())==1) // Gestione degli errori
continuare; // riprovare
return; // Esci da start()
}

if (Tip==1 && Cls_S==true) // Ordine di vendita aperto.
{ // c'è un criterio di chiusura
Avviso("Tentativo di chiusura della vendita ",Biglietto,";)
RefreshRates(); // Aggiorna i dati
Ans=OrderClose(Ticket,Lot,Ask,2); // Chiudi Vendi
if (Ans==true) // Ha funzionato :)
{
Avviso ("Ordine di vendita chiuso",Biglietto;)
break; // Esci dal ciclo di chiusura
}
if (Fun_Error(GetLastError())==1) // Gestione degli errori
continuare; // riprovare
return; // Esci da start()
}
break; // Esci mentre
}
//--------------------------------------------------------------- 7 --
// Ordinare i valori
RefreshRates(); // Aggiorna i dati
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Numero minimo di lotti
Libero =AccountFreeMargin(); // libera i fondi
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Valore di 1 lotto
Step =MarketInfo(Symb,MODE_LOTSTEP); // Cambio di passo delle dimensioni

if (Lots > 0) // Se i lotti sono specificati
Lts =Lotti; // lavoriamo con loro
else // % di fondi liberi
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Per l'apertura

if(Lts < Min_Lot) Lts=Min_Lot; // Non meno di Min_Lot; // Non meno di Min_Lot
if(Lts*One_Lot > Free) // Lotti più cari di Free
{
Alert(" Non abbastanza soldi ", Lts," lotti);
return; // Esci da start()
}
//--------------------------------------------------------------- 8 --
/Ordini aperti
se (NumberOfBarOpenLastPos()>0){
while(true) // Chiudere il ciclo degli ordini.
{
if (Total==0 && Opn_B==true) // Nessun ordine aperto
{ //open Criterio di acquisto.
RefreshRates(); // Aggiorna i dati
SL=Bid - New_Stop(StopLoss)*Point; // Calcolo dello SL aperto
TP=Bid + New_Stop(TakeProfit)*Point; // Calcolo del TP aperto.
Alert("Tentativo di aprire Buy. In attesa di risposta...");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//aprire Buy
if (Ticket > 0) // ha funzionato :)
{
Avviso ("Ordine di acquisto aperto",Biglietto;)
return; //Esci dall'ordine
}
if (Fun_Error(GetLastError())==1) // Gestione degli errori
continuare; // riprovare
return; // Esci da start()
}
if (Total==0 && Opn_S==true) // nessun ordine aperto
{ //aprire il criterio di vendita.
RefreshRates(); // Aggiorna i dati
SL=Ask + New_Stop(StopLoss)*Point; // Calcolo di SL aperto.
TP=Ask - New_Stop(TakeProfit)*Point; // Calcolo del TP aperto.
Alert("Tentativo di aprire Vendere. In attesa di risposta...");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Open Sel.
if (Ticket > 0) // Ha funzionato :)
{
Avviso ("Ordine di vendita aperto ",Biglietto;)
return; // Esci da start()
}
if (Fun_Error(GetLastError())==1) // Gestione degli errori
continuare; // riprovare
return; // Esci da start()
}
break; // Esci mentre
}
}
//--------------------------------------------------------------- 9 --
return; //exit while; //start()
}
//-------------------------------------------------------------- 10 --


//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione : 19.02.2008 |
//| Descrizione: restituisce il numero di barra dell'ultima posizione aperta o -1.
//+----------------------------------------------------------------------------+
//| Parametri: |
//| sy - nome dello strumento ("" o NULL - simbolo corrente) |
//| tf - timeframe ( 0 - timeframe corrente) |
//| op - operazione ( -1 - qualsiasi posizione) |
//| mn - MagicNumber ( -1 - qualsiasi numero magico) |
//+----------------------------------------------------------------------------+
intOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersTotal();

if (sy=="" || sy=="0") sy=Symbol();
per (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
se (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
se (t<OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True))
}

int Fun_Error(int Error) // Funzione di gestione degli errori
{
interruttore(Errore)
{ // Errori che possono essere evitati.
caso 4: Avviso("Il server commerciale è occupato. Riprova...");
Sleep(3000); // Soluzione semplice.
return(1); // Esci dalla funzione.
caso 135:Alert("Prezzo cambiato. Riprova...");
RefreshRates(); // Aggiorna i dati.
return(1); // Uscire dalla funzione.
caso 136:Alert("Nessun prezzo. In attesa di un nuovo tick...");
while(RefreshRates()==false) // Effettua un nuovo tick
Sleep(1); // Ritardo nel ciclo
return(1); // Esci dalla funzione
caso 137:Alert("Broker is busy. Try again...");
Sleep(3000); // Soluzione semplice.
return(1); // Uscire dalla funzione.
caso 146:Alert("Il sottosistema di trading è occupato. Riprova...");
Sleep(500); // Semplice decisione
return(1); // Esci dalla funzione
// Errori critici
caso 2: Avviso("Errore generale;)
return(0); // Esci dalla funzione.
caso 5: Alert("Versione più vecchia del terminale");
Lavoro=falso; // Non funziona più
return(0); // Esci dalla funzione
caso 64: Avviso("Account bloccato.");
Lavoro=falso; // Non funziona più
return(0); // Esci dalla funzione
caso 133:Alert("Commercio proibito.");
return(0); // Esci dalla funzione
caso 134:Alert("Non ci sono abbastanza soldi per eseguire la transazione.");
return(0); // Esci dalla funzione
default: Alert("Si è verificato un errore ",Error); // Altre opzioni
return(0); // Esci dalla funzione
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Controlla lo stop-prick.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Distanza minima
if (Parametr<Min_Dist) // Se meno del consentito.
{
Parametr=Min_Dist; // Imposta la tolleranza.
Avviso("Distanza di arresto aumentata;)
}
return(Parametr); // Valore di ritorno.
}
//-------------------------------------------------------------- 12 --

 
kurilko >> :

// Apertura degli ordini

se (NumberOfBarOpenLastPos()>0)

La funzione restituisce più di 0 solo se è stata aperta una posizione, se non -1 allora segue...

se (NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1)

{

}

 

Cambiata la condizione in if (NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1)

Ancora non funziona, forse deve essere scritto da qualche altra parte nel codice?

Motivazione: