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

 
EVladMih:

Artemis, sei partita dal secondo post spiegando all'uomo che stava combinando il bianco con il caldo, e l'unica cosa che hai spiegato è stata la parte della domanda che nessuno ti ha chiesto. Si dà il caso che io sappia quanto codice ha scritto quest'uomo, ed eri TU che non entravi nel punto, non lui. A proposito, questo codice non lo sta scrivendo per se stesso, ma per la gente.

Quindi, se non volete o non potete aiutare, almeno non interferite e non accusate gli altri dei vostri peccati.

Gli uomini che sono più informati, per favore aiutino satorifx. Ha davvero bisogno di mescolare il bianco con il caldo, ma non è colpa sua... Conoscete le specificità di MT4, dove le cose della stessa opera sono cantate su palcoscenici diversi (diversi sistemi di coordinate).

Prima di tutto. Prima di tutto, non ti sto parlando per nome. Secondo: imparate a leggere correttamente il nickname di una persona, dato che non potete usarlo. Terzo - vi darò un suggerimento su come identificare il crossover con la linea di tendenza. Nell'esempio scritto appositamente per i principianti, la linea di tendenza stessa non viene utilizzata per i calcoli. È solo un indizio in quale direzione muoversi. Tuttavia, ci sono molti metodi per questo problema. Non è necessario fissarsi sul problema dell'incompatibilità delle coordinate, ma decidere come uscire dalla situazione con i dati di input disponibili.

И... questo... Posso scrivere ciò che non avete ancora sognato...

 

EVladMih:,

ma probabilmente non si dovrebbe dividere la gente in bagni sulla base del locale/non locale.

Non si tratta di "locale/non locale" di una particolare persona. Si tratta del modo in cui la persona pone la domanda. Se ho sbagliato la sua domanda, questo non gli dà il diritto di essere scortese. Ho cercato sinceramente di aiutarlo. E penso che se dopo la mia risposta mi avesse detto che questo non è quello che voleva e chiedeva, e mi avesse spiegato il compito specifico che gli era stato dato, avremmo capito come fare tutto in modo rapido ed efficiente.

Ora stai parlando di come non può identificare il crossover con la linea di tendenza. Ma questo fa solo sorridere. O forse ho sbagliato di nuovo tutto e merito un'altra cafonaggine? La semplice funzione ObjectGetValueByShift() restituirà il prezzo della linea di tendenza su una certa barra. Quindi confronta un prezzo con un altro.

 
artmedia70:
Per quanto ho capito, vuole che l'oggetto sia posizionato verticalmente e non spostato orizzontalmente al prezzo più basso delle barre che vengono visualizzate sullo schermo. Gli ho mostrato la prima parte della sua domanda - come trovare il prezzo minimo sul grafico. Non ha capito e mi ha abbaiato contro. Ora lasciatelo cercare da solo come fare ciò di cui ha bisogno senza attraversare due sistemi di coordinate. Questo è facile. Forse qualcun altro lo farà per lui, ma io mi congedo. Non mi piacciono i cafoni e gli scrocconi - non si è nemmeno preso la briga di indagare e scrivere qualcosa in codice da solo.

artmedia70, sono una persona non conflittuale e se ho detto qualcosa di sbagliato, mi scuso e chiedo che non sia considerato scortese.

Non so davvero come risolvere il problema.

Incrociato 2 sistemi di coordinate finora in modo semplice: fatto un'etichetta e messo manualmente al prezzo minimo - così ho un'etichetta coordinata Y e corrisponde al prezzo minimo, che ottengo con la funzione WindowPriceMin() . Ma è manuale, mi piacerebbe tracciare e correggere programmaticamente.

Se c'è davvero una soluzione per questo, e una semplice, sarei grato per l'aiuto.


 
artmedia70:

Ora stai dicendo che non può rilevare un crossover con la linea di tendenza. Ma questo mi fa solo sorridere. O ho di nuovo frainteso tutto e mi merito un'altra cafonaggine? La semplice funzione ObjectGetValueByShift() restituirà il prezzo della linea di tendenza su una certa barra. Quindi confronta un prezzo con un altro.


Non ascoltate EVladMih - non ha senso.
So molto bene come trovare la distanza dalla tendenza quando si tratta di prezzo. La domanda è diversa.

Io uso dei marcatori nel mio indicatore che sono appesi in modo permanente nella parte superiore dello schermo. È dopo lo spostamento di qualsiasi marcatore che si dovrebbe determinare la distanza dal marcatore alla linea di tendenza, ma i marcatori hanno coordinate (x,y) sullo schermo, mentre ObjectGetValueByShift lavora con il prezzo, cioè in un altro sistema di coordinate. Ecco da dove viene tutto il trambusto.

Non posso usare l'oggetto OBJ_TEXT con coordinate di prezzo, perché voglio che rimanga in un posto, come fanno le etichette ( oggetto OBJ_LABEL) se sposto il grafico, invece dei tag.

 
satorifx:

Non ascoltate EVladMih - scrive cose senza senso.
So molto bene come trovare la distanza dalla tendenza quando si tratta di prezzo. La domanda è diversa.

Nel mio indicatore uso dei marcatori che sono costantemente in bilico nella parte superiore dello schermo. È dopo lo spostamento di qualsiasi marcatore che la distanza dal marcatore alla linea di tendenza dovrebbe essere determinata, ma i marcatori hanno coordinate (x,y) sullo schermo, mentre ObjectGetValueByShift lavora con il prezzo, cioè in un altro sistema di coordinate. Ecco da dove viene tutto il trambusto.

Voglio dire in anticipo che non posso usare l'oggetto OBJ_TEXT con le coordinate del prezzo al posto delle etichette, perché voglio che queste (etichette) non siano spostate al prezzo se sposto il grafico, ma che rimangano in un posto, come fanno le etichette ( oggetto OBJ_LABEL).

Per evitare di avere a che fare con i ricalcoli, usate ARROW con coordinata x costante = barra particolare al posto delle etichette. È possibile memorizzare e modificare la barra nella descrizione dell'oggetto. Non appena l'oggetto viene spostato, scrive una nuova coordinata x uguale alla nuova barra nella sua descrizione. Allora non ci saranno problemi con la ricerca dei prezzi. E localizzare sempre l'oggetto in base alla sua descrizione sull'asse orizzontale. L'asse verticale è il prezzo. Questa è un'opzione meno costosa. E l'oggetto sarà sempre sull'asse x nella stessa posizione, corrispondente a un particolare numero di barra.

ZS "...le mie scuse e la prego di non prenderla come una cafonata..." Va bene, lasci perdere... ;)

 

Ho inventato un indicatore. Divide una coppia per un'altra, per ottenere strumenti non inclusi al terminale. Ma ora carica il terminale e ricalcola ad ogni tick. L'ho inserito come nel mio Expert Advisor

se (Time[0]<=PrevTime) return(0);

PrevTime=Time[0];

Ora disegna solo su una nuova candela. Per favore, ditemi come fare. Testo dell'indicatore.

P/S/ A proposito. Tutte le coppie sono mostrate normalmente. Voglio vedere Appl a Rublo. Non voglio vederlo.

#proprietà indicator_separate_window
#proprietà indicator_buffers 1
#proprietà indicator_color1 Lime
//--- parametri di ingresso
extern string Paar_1="EURUSD"; //Simbolo desiderato per il confronto
extern string Paar_2="GBPUSD"; // strumento desiderabile per il confronto
extern bool Mirroring_Paar_2=false;
//--- buffer
doppio ExtMapBuffer1[];
int statico PrevTime=0;
int start=1;


//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
//---- indicatori
stringa short_name=Paar_1;
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
IndicatoreNomeCorto(nome_corto);
SetIndexLabel(0,short_name);
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int start()
{
if (Time[0]<=PrevTime && start==1) return(0);
PrevTime=Time[0];
int i, counted_bars=IndicatorCounted();
i=bars_conteggiate-1;
//----
mentre(i>=0){
double Compare1=iClose(Paar_1,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE));
double Compare2=iClose(Paar_2,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE));
if(Compare2!=0 && Compare1!=0) double Compare=Compare1/Compare2;
if(Mirroring_Paar_2==1) Compare=1/Compare;

ExtMapBuffer1[i]=Compare;
RefreshRates();
i--;
}
//----
inizio=0;
ritorno(0);
}
//+------------------------------------------------------------------+y

 
Ciao
Aiuto! Come faccio a fare un ritardo tra le aperture degli ordini, Sleep 3000?
int start() {
string ls_0;
int li_8;
bool li_12;
int li_20;
int li_24;
double ld_28;
int li_36;
int li_40;
string ls_48;
string ls_56;
string ls_64;
double ld_76;
int li_84;
E questo è come dovresti incollare

Nel caso in cui il gufo stesso

Un'altra domanda, questo gufo è impostato per sette coppie contemporaneamente, ho specificamente bisogno di fare una pausa tra le aperture degli ordini! Per esempio, oggi sono stati aperti 10 ordini simultaneamente sulla notizia e ne ho bisogno con un ritardo!

Grazie!

/* Decompilato cancellato - Vinin */

 

Mi sono appena ricordato, potete dirmi dove inserire Sleep(60000); in modo che ci sia un ritardo tra le aperture

se (ai_8 == OP_BUY) ad_20 = Ask;
se (ai_8 == OP_SELL) ad_20 = Bid;
if (!IsTradeContextBusy()) {
li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64)
if (li_68 > 0) {
Print("orderSendReliable(): Successo! Ticket: " + li_68);
return (li_68);
}



 

L'hai rubato, ma non hai idea di cosa farci))

Non ho scritto nessun consigliere per me stesso, ho solo letto, esaminato i gufi storti sui loro schemi di blocco, cercando di capire l'approccio migliore

quindi potrei sbagliarmi.

int counterrore=0, //подщет количества ошибок открытия ордера
timesleep=10000; // время задержки
while () // до тех пор пока не будет выход с цыкла
{
 if (!IsTradeContextBusy())
 { 
  RefreshRates(); // последние данные
  if (ai_8 == OP_BUY) ad_20 = Ask;
  if (ai_8 == OP_SELL) ad_20 = Bid;
  li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
  MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64);
  if (li_68 > 0) 
  {
   Print("orderSendReliable(): Success! Ticket: " + li_68);
   return (li_68);
  }
  Print("orderSendReliable(): False! Error " + GetlastError()); // поищите коректную функцию обработки ошибок
  counterrore++; // количество неудач - сумирование

  if(counterrore>6) // если не удалось 6 раз открыть
  {
   Print("orderSendReliable(): Error!!! " +counterrore+"times --return(-1)" ); // сообщаем логу о даной трагедии
   return (-1); // -1 или что там Вы придумаете для отработки ситуации
  }
 }
 Sleep (timesleep); // время сна для цикла посылки  запроса на сервер и для !IsTradeContextBusy()
}
 
Ora i moderatori verranno a bannare gli ultimi due davanti a me :-))
Motivazione: