[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 417

 
okvseok:


beh, per esempio, non girare la rotella del mouse (tasto) per 3 minuti a sinistra o a destra)), ma semplicemente inserire una data specifica della barra o qualcos'altro.

Grazie per la tua risposta!


Premere la barra spaziatrice e inserire la data desiderata.

La risposta è tanto corretta quanto inutile. Totalmente pertinente alla domanda.

 
TarasBY:
Nell'angolo in basso a sinistra del grafico (dove c'è la data), fai doppio clic e nella finestra che si apre, inserisci la data desiderata nel formato DD.MM.YYYYY - è abbastanza "non scritto a mano"?
Sì, grazie mille, ok.
 
Run:

o in altre parole
lo script dovrebbe scrivere più o meno n linee, ma ne scrive solo una

Per cominciare, spostate la procedura di apertura e chiusura dei file fuori dal ciclo.
 

Grazie, funziona.

  handle=FileOpen("AUDJPY.csv", FILE_READ|FILE_WRITE, '\t');
  for (int i=NumberOfCandels; i>0; i--) {
    arrowbuy = iCustom(NULL, 0, "xxx", 0, i);
    arrowsell = iCustom(NULL, 0, "xxx", 1, i);
    if(arrowbuy != EMPTY_VALUE && arrowsell == EMPTY_VALUE) {
      if(handle>0) {
        FileWrite(handle, TimeToStr(Time[i], TIME_DATE|TIME_MINUTES), " Buy");
        }
      }
    if(arrowsell != EMPTY_VALUE && arrowbuy == EMPTY_VALUE) {
      if(handle>0) {
        FileWrite(handle, TimeToStr(Time[i], TIME_DATE|TIME_MINUTES), " Sell");
        }
      }
  }
  FileClose(handle);
 
okvseok:


Beh, per esempio, non rotolare la rotella del mouse (tasto) 3 minuti a sinistra o a destra))), ma solo inserire una certa data del bar o qualcos'altro.

Grazie per la risposta!

C'è una funzione

int iBarShift( simbolo stringa, int timeframe, datetime time, bool exact=false)
Ricerca di un bar in base al tempo. La funzione restituisce l'offset della barra a cui appartiene il tempo specificato. Se non c'è nessuna barra per il tempo specificato ("buco" nella storia), la funzione restituisce, a seconda del parametro esatto, -1 o l'offset della barra più vicina.
Parametri:
simbolo - Nome del simbolo dello strumento. NULL significa simbolo corrente.
timeframe - Periodo. Può essere uno dei timeframe di un grafico. 0 significa il periodo del grafico corrente.
tempo - Valore temporale della ricerca.
esatto - Valore restituito se non viene trovata nessuna barra. FALSE - iBarShift ritorna più vicino. TRUE - iBarShift restituisce -1.
Esempio:
 datetime some_time=D'2004.03.21 12:00'; int shift=iBarShift("EUROUSD",PERIOD_M1,some_time); Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);

 
Chiripaha:

: )))))))) (nessuna notazione... e nessun commento)

Dei due, chi fa la domanda e chi risponde, è più probabile che tu, chi fa la domanda, non capisca bene cosa succede agli ordini pendenti quando vengono attivati. Un ordine in sospeso viene eseguito a QUALSIASI prezzo più vicino ad esso. La regola generale per un ordine pendente è che se il prezzo lo ha raggiunto, il trade andrà a mercato. E il prezzo non avrà importanza. Questo vale anche per gli Stop Loss, dato che sono anch'essi ordini pendenti, solo la posizione opposta del trade stesso. Questo è leggermente diverso dagli scambi in borsa. Forse è per questo che siete confusi.

In questo senso molto dipende dalla qualità del broker. Con questo intendiamo sia i regolamenti per l'esecuzione degli scambi, sia la disponibilità di liquidità presso quel broker, e forse un mucchio di altre caratteristiche: presumibilmente l'onestà, ecc... Se leggete il contratto con quasi tutti i broker forex (DC), si scopre che la vostra transazione (e quella di qualsiasi altro trader) può chiudersi a qualsiasi prezzo conveniente di questo "broker" e sarà all'interno della legge e dei regolamenti, perché l'avete firmato. - Ma questi sono altri argomenti. Non ha niente a che vedere con la programmazione.


Se hai un robot sulla demo, di solito tutto si apre bene lì per attirare la gente. E, di nuovo, ripeto, gli ordini che sono stati aperti manualmente si sono aperti nel luogo dove sono stati impostati!
 
Ekburg:

Per quanto riguarda il broker forex, non ho un quadro chiaro, ma ho fatto trading sulla demo. E, di nuovo, ripeto, gli ordini che sono stati aperti manualmente si sono aperti proprio dove sono stati impostati!

In conclusione: naturalmente, si potrebbe, per motivi di interesse, chiedervi di descrivere le condizioni in modo più dettagliato, dal momento che avete fornito solo una descrizione generale: quando sono stati impostati gli ordini del robot (in anticipo o no; manuale intorno allo stesso tempo del robot o no, ecc). Ma in ogni caso, anche in questo caso dovrete trattare solo con il vostro broker, perché ha il suo proprio thread che probabilmente mette in coda i trade. Supponiamo che, se l'ordine pendente manuale è stato piazzato per primo, allora il tempo della sua esecuzione sarà diverso (compresa la coda di altri clienti), quindi il prezzo può essere diverso. Se il robot ha piazzato gli ordini entro il periodo di segnali formati, allora l'arrivo degli ordini nella coda non è evidente - da qui la possibile distorsione nel prezzo di esecuzione. Inoltre, può essere influenzato dalla dimensione delle posizioni di cui non si scrive nulla... ecc...

Ma... tutto ciò può essere chiarito solo con un broker (DC). E suppongo che troverà un mucchio di ragioni che non ho menzionato. - E il consiglio era giusto: il registro nelle vostre mani e al broker, a meno che, naturalmente, si pensa ancora i vostri ordini in sospeso si sono spostati. Ma basta non confondere 2 concetti diversi: un ordine in sospeso e un affare su questo ordine in sospeso. L'ordine Limit è un'istruzione per entrare nel mercato a qualsiasi prezzo più vicino con volume dichiarato. E il Deal - è il prezzo al quale è stato possibile eseguire l'ordine per il volume di denaro dichiarato (lotto). - E i prezzi di questi ordini sono probabilmente diversi (soprattutto sul mercato veloce, che è quello a cui ti è stato dato il link). Nel caso di un ordine limite, il prezzo dell'ordine e il prezzo di esecuzione sono uguali (per definizione).

E il fatto che la demo e gli ordini reali del broker non differiscono è buono! - Questo dimostra che il broker non falsifica le transazioni per attirare i clienti (come dici tu). - In questo caso non c'è alcuna discrepanza.

 
Zhunko:

1. Come hai iniziato? Dovete eseguirlo senza aggiornare prima. Cioè IsRefreshRates = false. I dati non saranno aggiornati.

2. Allora dovete eseguirlo con IsRefreshRates = true. I dati saranno aggiornati.

Ecco uno screenshot 1: schermata 2:

Notate i tempi della barra. Potete anche vedere che MarketInfo() prende i dati dalla panoramica del mercato.

Ecco l'Expert Advisor. L'ho corretto un po'. Spunta il nome dello strumento.


1. Ho usato un terminale indipendentemente da come, con o senza aggiornamento, lo schermo è lo stesso! Ho scaricato il terminale insieme agli script per il test con il 99% di citazione da Dookie. Li ho versati in quanto non si attacca a causa del sovradimensionamento. Ecco il link:http://www.load.to/PqWVW2JQ75/Тиковые_котировки_для_тестера_MT4_от_DukasCopy.zip

2. In qualsiasi altro terminale la situazione è già diversa. Qui su Oanda, per esempio:

2.1 Inizialmente nel caso:

IsRefreshRates = false

Quindi:

2.2 Più avanti nel caso:

IsRefreshRates = true

come questo.

Come potete vedere nel primo modo, i prezzi sono lontani dalla coppia AUDNZD... e nella seconda modalità i prezzi sono esattamente quelli che vogliamo vedere...

Si scopre che ancora RefreshRates() "tira" le citazioni dal server. Il supporto è addormentato, quindi questa variante è più vicina di quella originale.

 
Zhunko:
RefreshRates() aggiorna solo ciò con cui l'esperto sta lavorando. Ecco come lo scopre. Dall'esperto. Molto tempo fa qualcuno di Metakvot ne ha scritto.


Vadim, dubito che RefreshRates() sia consapevole di quali strumenti abbia bisogno l'Expert Advisor. Non tutti gli Expert Advisors hanno un nome di strumento definito nei parametri globali, vero? Bene... Se è così, si pone la domanda: su quale baseRefreshRates() sa quali dati di mercato dello strumento devono essere aggiornati e quali non devono essere aggiornati?
 
Integer:

Junko, pagina 409, il post molto in basso - dice perché i dati sono aggiornati. Perché iOpen(), iClose() sono chiamati, e lo si prova da RefreshRates(). La prima volta lo script è stato eseguito senza RefreshRates(), ma sono state chiamate le funzioni iOpen() e iClose(), e da questo il terminale carica i dati. Nella seconda esecuzione i dati erano già lì e sappiamo che la barra zero viene caricata per prima, quindi l'impressione è che i dati siano tutti caricati, ma potrebbe non essere tutto caricato, ma potrebbe essere in lavorazione.

...E ancora dimostri di aver capito il caricamento dei dati.... di quali flussi e sincronizzazioni possiamo parlare qui...


PerchéiOpen() dovrebbe estrarre i dati dal server? È scritto nella documentazione che restituisce un valore... Quindi è il ritorno, non il download.
Motivazione: