Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1105

 
shtr:

Wow!!! Grazie! Questo richiede un po' di riflessione.

Forse c'è un "self-study" sulle nuove regole da qualche parte? Il numero di pagina a 4 cifre è un po' stressante...

Chi è facile ora... Ci sono altri 5 argomenti di questo tipo sui neofiti nell'archivio ))))

Per essere onesti, gli esempi dalla guida e da codobase sono sufficienti se avete già esperienza di programmazione, preferibilmente in C++. Se non avete alcuna esperienza, potete dare prima un'occhiata al tutorial C++, MQL è molto simile nella sintassi.

 
evillive:

Chi ce l'ha facile ora... Ci sono altri 5 argomenti di questo tipo sui neofiti nell'archivio ))))

Per essere onesti, gli esempi dalla guida e da codobase sono sufficienti se avete già esperienza di programmazione, preferibilmente in C++. Se non avete alcuna esperienza, potete studiare prima un tutorial di C++, MQL è molto simile nella sintassi.

Nessuna esperienza = tutorial C++; )))

Grazie per il vostro aiuto!

 

Buon pomeriggio, cari signori!

Per favore, aiutatemi ad aggiungere un avviso all'indicatore quando appare una frecciache indica una coppia di valute.

Ho provato io stesso, ma come si dice, è difficile non sapere e dimenticare. Grazie in anticipo.



#proprietà indicator_chart_window

#proprietà indicator_buffers 4

#property indicator_color1 White

#property indicator_color2 White

#property indicator_color3 LightGreen

#property indicator_color4 Red


extern int CountBars = 300;

extern string FS = " ** Sensibilità del filtro: Alta <-[1..3]-> Bassa ** ";

extern int Sensibilità = 2;

doppio g_ibuf_92[];

doppio g_ibuf_96[];

doppio g_ibuf_100[];

doppio g_ibuf_104[];

int gi_unused_108 = -1;


int init() {

IndicatorBuffers(4);

SetIndexStyle(2, DRAW_ARROW);

SetIndexArrow(2, 233);

SetIndexBuffer(2, g_ibuf_92);

SetIndexStyle(3, DRAW_ARROW);

SetIndexArrow(3, 234);

SetIndexBuffer(3, g_ibuf_96);

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 3, White);

SetIndexBuffer(0, g_ibuf_100);

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 3, White);

SetIndexBuffer(1, g_ibuf_104);

SetIndexEmptyValue(0, 0);

SetIndexEmptyValue(1, 0);

SetIndexEmptyValue(2, 0);

SetIndexEmptyValue(3, 0);

SetIndexLabel(2, "Buy Signal");

SetIndexLabel(3, "Sell Signal");

SetIndexLabel(0, "High");

SetIndexLabel(1, "Low");

SetIndexEmptyValue(0, EMPTY_VALUE);

SetIndexEmptyValue(1, EMPTY_VALUE);

SetIndexEmptyValue(2, EMPTY_VALUE);

SetIndexEmptyValue(3, EMPTY_VALUE);

stringa ls_0 = "Scalper Signal";

IndicatoreNomeCorto(ls_0);

se (Sensibilità < 1) Sensibilità = 1;

se (Sensibilità > 3) Sensibilità = 3;

ritorno (0);

}


int deinit() {

ritorno (0);

}


doppio sellSignal(int ai_0) {

bool li_4 = TRUE;

se (Sensibilità > 2)

se (iHigh(Symbol(), Period(), ai_0 + 6) >= iHigh(Symbol(), Period(), ai_0 + 5)) li_4 = FALSE;

se (Sensibilità > 1)

se (iHigh(Symbol(), Period(), ai_0 + 5) >= iHigh(Symbol(), Period(), ai_0 + 4)) li_4 = FALSE;

se (Sensibilità > 0)

se (iHigh(Symbol(), Period(), ai_0 + 4) >= iHigh(Symbol(), Period(), ai_0 + 3)) li_4 = FALSE;

se (li_4) {

se (iClose(Symbol(), Period(), ai_0 + 2) < iHigh(Symbol(), Period(), ai_0 + 3))

se (iClose(Symbol(), Period(), ai_0 + 1) < iLow(Symbol(), Period(), ai_0 + 3)) ritorna (iHigh(Symbol(), Period(), ai_0 + 3) + 10.0 * Punto)

}

ritorno (0);

}


doppio buySignal(int ai_0) {

bool li_4 = TRUE;

se (Sensibilità > 2)

se (iLow(Symbol(), Period(), ai_0 + 6) <= iLow(Symbol(), Period(), ai_0 + 5)) li_4 = FALSE;

se (Sensibilità > 1)

se (iLow(Symbol(), Period(), ai_0 + 5) <= iLow(Symbol(), Period(), ai_0 + 4)) li_4 = FALSE;

se (Sensibilità > 0)

se (iLow(Symbol(), Period(), ai_0 + 4) <= iLow(Symbol(), Period(), ai_0 + 3)) li_4 = FALSE;

se (li_4) {

se (iClose(Symbol(), Period(), ai_0 + 2) > iLow(Symbol(), Period(), ai_0 + 3))

se (iClose(Symbol(), Period(), ai_0 + 1) > iHigh(Symbol(), Period(), ai_0 + 3)) ritorna (iLow(Symbol(), Period(), ai_0 + 3) - 10.0 * Punto)

}

ritorno (0);

}


int start() {

int li_0 = IndicatorCounted();

se (li_0 < 0) ritorna (-1);

se (li_0 > 0) li_0--;

int li_4 = Bars - li_0;

for (int l_count_8 = 0; l_count_8 < li_4; l_count_8++) {

g_ibuf_92[l_count_8 + 3] = buySignal(l_count_8);

g_ibuf_96[l_count_8 + 3] = sellSignal(l_count_8);

se (buySignal(l_count_8) > 0,0 || sellSignal(l_count_8) > 0,0) {

g_ibuf_100[l_count_8 + 3] = iHigh(Symbol(), Period(), l_count_8 + 3);

g_ibuf_104[l_count_8 + 3] = iLow(Symbol(), Period(), l_count_8 + 3);

}

}

ritorno (0);

}

 

Ciao scavatori.

Sono un po' storto con il risultato della cronologia degli ordini.

Strategia:

1-Aprire 2 ordini in direzioni diverse (blocco di fatto) con uno stop corto e un profitto lungo.

Se il prezzo si muove stabilmente fuori dal range, abbatterà lo stop di uno degli ordini, e andrà per un profitto lungo sull'altro ordine.

3 - Quando lo stop di uno degli ordini viene colpito, un ordine pendente viene piazzato al livello della sua apertura, e se il prezzo torna indietro, l'ordine viene aperto di nuovo

e si ritorna allo stato di posizione fino alla prossima mossa verso il profitto attraverso il knock-out dello short stop.

Obiettivo:

Per tracciare 3 knockout di arresto, per il 4 ° ordine, Martin è innescato. Il problema è che qualcosa va storto. Determino la redditività dell'ordine tramite la cronologia OrderProfit(),

Ma non ho ancora capito come funziona OrdersHistoryTotal(). La funzione controlla il numero d'ordine o la quantità dell'ordine?

Allo stesso modo, non capisco come interpreta la cancellazione di una posizione (sia come perdita che come niente). Come posso rintracciare 3 perdite consecutive in una situazione del genere quando la storia mostra molte altre cose oltre alle perdite?

 
Fartarantula:

Ciao scavatori.

Sono un po' storto con il risultato della cronologia degli ordini.

Strategia:

1-Aprire 2 ordini in direzioni diverse (blocco di fatto) con uno stop corto e un profitto lungo.

Se il prezzo si muove stabilmente fuori dal range, abbatterà lo stop di uno degli ordini, e andrà per un profitto lungo sull'altro ordine.

3 - Quando lo stop di uno degli ordini viene colpito, un ordine pendente viene piazzato al livello della sua apertura, e se il prezzo torna indietro, l'ordine viene aperto di nuovo

e si ritorna allo stato di posizione fino alla prossima mossa verso il profitto attraverso il knock-out dello short stop.

Obiettivo:

Per tracciare 3 knockout di arresto, per il 4 ° ordine, Martin è innescato. Il problema è che qualcosa va storto. Determino la redditività dell'ordine tramite la cronologia OrderProfit(),

Ma non ho ancora capito come funziona OrdersHistoryTotal(). La funzione controlla il numero d'ordine o la quantità dell'ordine?

Allo stesso modo, non capisco come interpreta la cancellazione di una posizione (sia come perdita che come niente). Come posso rintracciare 3 perdite conseguenti in una situazione come questa quando la storia mostra molte altre informazioni oltre alle perdite?

La prima cosa da ricordare è che un ordine pendente non è un ordine in perdita; o è scattato o è stato cancellato.

La perdita dovrebbe essere vista sugli ordini di mercato (Compra, Vendi).

OrdersHistoryTotal() restituisce la quantità di ordini nella cronologia di trading disponibile (compresi i depositi e i prelievi dal conto, se è stata scelta la modalità "cronologia completa"). Il numero 0 è di solito il primo deposito, cioè il primo ordine; il numero OrdersHistoryTotal()-1 è l'ultimo ordine nella storia.

Questo significa che dobbiamo fare un loop degli ordini dall'ultimo al primo, contando allo stesso tempo gli ordini pendenti e quelli perdenti.

Ma perché piazzare ordini pendenti se possiamo sempre aspettare che il prezzo raggiunga il livello dell'ordine chiuso allo stop e aprire subito l'ordine in base al mercato? Gli ordini limite sono un collegamento inutile in questo caso, perché confondono il conto.

 
Fartarantula: Strategia:

1-Aprire 2 ordini in direzioni diverse (blocco effettivo) con uno stop corto e un profitto lungo.

2-Se il prezzo si muove costantemente fuori dal range, abbatterà lo stop di uno degli ordini, e andrà per un profitto lungo sull'altro ordine.

Ho guardato la tua strategia con gli occhi del programmatore. Quando il prezzo sale, raggiunge il Sell SL, quindi c'è un ordine Buy con il suo SL e da qualche parte il TP. In questo caso sei riuscito ad ottenere una piccola perdita sull'ordine chiuso. Ora consideriamo la variante con due ordini pendenti. Invece di aprire due ordini, mettiamo due ordini pendenti proprio sui posti dove hai SL. Quando il prezzo raggiunge Buy Stopl, viene aperto un ordine di acquisto e abbiamo la stessa posizione, ma non c'è perdita. E ora la cosa più interessante. Come il prezzo si muove verso l'alto ...

 

...E mentre il prezzo saliva sul tuo principio, il tuo TP si allontanava. E tu hai meno possibilità di prendere il profitto di me, se consideri le nostre azioni nel momento.

E anche se non faccio trading in parallelo con te, il tuo TP è tra i pip, e il mio lo è di fatto. E sarà sempre - si dà al mercato una parte di movimento direzionale.

Se non lo sai, allora dovresti considerare che anche uno sfortunato 2 punti di spread trasforma un sistema positivo in uno perdente. A giudicare dalla prima cifra, hai uno spread di circa 20 pip su uno spread a 5 cifre,

perché la differenza tra gli ordini piazzati simultaneamente "a occhio" è di 40 pips secondo la figura.

Non è questo il punto... avete bisogno di uno snippet di codice, il rilevamento corretto di una serie di 3 arresti eliminati. Perché tutti cercano di correggere il sistema? E la metodologia del suddetto compagno

non funzionerà nemmeno. Il mercato potrebbe semplicemente non lasciarvi aprire, o aprire dove non dovreste. Amico, capisco tutti voi ragazzi e il vostro desiderio di condividere le vostre esperienze. Ma ho solo bisogno di tracciare tre fermate.

Tutto è a posto, ho solo visto per caso che ho sbagliato l'ordine con un doppio. Come si è scoperto, Histototal ha dato quello che ha ritenuto opportuno, e il ciclo di determinazione di un ordine chiuso per perdita dalla storia ha mancato l'ordine.

 
Fartarantula Tutto è in linea, ho appena visto per caso che ho sbagliato l'ordine con il raddoppio. Come si è scoperto, Histototal ha dato quello che ha ritenuto opportuno, e il ciclo di determinazione di un ordine chiuso per perdita dalla storia ha mancato l'ordine.

Devi allontanarti dalla qualifica di Coder e imparare le basi della programmazione. Ecco altri dettagli... E qui.

Ecco il problema. Cosa ritorna, come dice l'autore, Histototal in questo scritto sullo stesso conto della domenica.

void OnStart()
{
  Alert("Cчет " + DoubleToStr(AccountNumber(), 0),
        "  Дата ", TimeToStr(TimeLocal(),TIME_DATE),
        "  Ордеров ", OrdersHistoryTotal());
}

Perché diverso?

Se ci sono meno e più ordini in un conto, allora 0 228 228 216 98? E se ci sono meno ordini, l'elaborazione è più veloce!

Il cliente sta sudando - è impossibile lavorare, il terminale è glitchato, Histototal ha dato quello che voleva, il ciclo l'ha saltato!

 

Buon pomeriggio a tutti. Aiutami ad alzare le frecce nell'indicatore, quelle inferiori sono ok, ma quelle superiori sono in cima alle candele.

Ho provato ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20); non ha funzionato. Il punto di ancoraggio della freccia (oggetto) è in alto, come faccio a spostarlo in alto?

//display signal arrow 
      RefreshRates(); 
   
      if(   (High[i+1]  >upBuffer[i+1] ) 
         && (Close[i+1] >Open[i+1]     ) 
         && (Close[i]   <Open[i]       ) 
        )            
      {  //draw a dot on top of the bar
         string Arrow_name_jack1 = "AboveTopBand_SellBar_jack1_" + TimeToStr(Time[i],TIME_DATE|TIME_SECONDS);  //TimeCurrent()
         ObjectCreate(Arrow_name_jack1, OBJ_ARROW, 0, Time[i], High[i]+iATR(NULL,0,20,i)/5);//5*pips);  //OBJ_ARROW=22,window=0,
//???????????? так не получилось         //  ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20);
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE, 242          );  //159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR,     Yellow    );  //Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE,     STYLE_SOLID  );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH,     2            ); 
            
      }
      else
      if (   (Low[i+1]   <dnBuffer[i+1] ) 
          && (Close[i+1] <Open[i+1]     ) 
          && (Close[i]   >Open[i]       ) 
         )            
      {  //draw a dot on top of the bar
          Arrow_name_jack1 = "BelowBotBand_BuyBar_jack1_" + TimeToStr(Time[i],TIME_DATE|TIME_SECONDS);//TimeCurrent()
         ObjectCreate(Arrow_name_jack1, OBJ_ARROW, 0, Time[i], Low[i]-iATR(NULL,0,20,i)/5);//5*pips);  //OBJ_ARROW=22,window=0,
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE, 241          );//159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR,     Yellow   );//Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE,     STYLE_SOLID  );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH,     2            ); 
      }
   }//end for(i = limit; i >= 0; i--)
 
mikanit:

Buon pomeriggio a tutti. Aiutami ad alzare le frecce nell'indicatore, quelle inferiori sono ok, ma quelle superiori sono in cima alle candele.

Ho provato ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20); non ha funzionato. Il punto di ancoraggio della freccia (oggetto) è in alto, come spostarlo in alto?

ObjectSetInteger(0,Arrow_name_jack1,OBJPROP_ANCHOR,ANCHOR_BOTTOM);

Raccomando di usare variabili separate per memorizzare i nomi delle frecce superiori e inferiori, per evitare confusione.

E sì, disegnare frecce nell'indicatore con oggetti è una perversione. Ci sono buffer di indicatori:

SetIndexStyle(0,DRAW_ARROW,0,1,clrRed);

    SetIndexArrow(0,242);



Motivazione: