Tick ??????Size, Tick Rate, Tick Spread en Tick Logger-indicatoren - Page 3
Page 3 of 634 FirstFirst 1234 LastLast
Results 21 to 30 of 35

Thread: Tick ??????Size, Tick Rate, Tick Spread en Tick Logger-indicatoren

  1. #21

    Quote Originally Posted by ;
    Ik begrijp hoe indiors in MT werken, dat alle indiors draaien op wat MT de hoofdthread noemt, samen met het platform, en EA's en scripts draaien op de uitvoeringsthread. EA's ontvangen geen tikken per zeg maar maken een kopie van de gegevens uit de hoofdthread om op te draaien. dat is de reden waarom als je een script in een lus uitvoert en het gebruikt om te ruilen, je de functie refresshrate() moet gebruiken. of het script zal nooit nieuwe gegevens zien. Als een EA of Script een indior aanroept met bijvoorbeeld de iCustom-functie, laadt het eigenlijk een tweede kopie van de indior op de achterkant...
    Zeer goede informatie, CockeyedCowboy. Bedankt voor al je inspanningen! Zowel jij als rooicol zijn MT4-tovenaars!

  2. #22

    Quote Originally Posted by ;
    zznbrm allemaal, dus ik merk dat je twee kaarten open kunt hebben met hetzelfde symbool en allemaal dezelfde binnenkanten in elk venster. dat slechts ��n venster tegelijk wordt bijgewerkt. Het venster met de verlichte titelbalk wordt als eerste uitgevoerd en de andere worden ��n voor ��n in z-volgorde uitgevoerd. Ik heb twee vensters met code geladen om de uitvoering te vertragen, om dit te controleren. Keit
    Dat is interessant, daar heb ik nooit eerder over nagedacht, ik nam gewoon vaag aan dat het alles tegelijk deed, maar ik denk dat het zich een weg moet banen in een sequenti�le volgorde. Dit is nuttige informatie over GlobalVariableSet() en FileWrite(), als u andere grafieken hebt met GlobalVariableGet() en FileRead().

  3. #23
    zznbrm Bedankt voor de les vandaag, er zijn maar een paar mensen die ik naar hun code zal kijken, die van jou. .... Mijn begrip van hoe indiors in MT werken, is dat alle indiors draaien op wat MT de hoofdthread noemt, samen met het platform, en EA's en scripts draaien op de uitvoeringsthread. EA's ontvangen geen tikken per zeg maar maken een kopie van de gegevens uit de hoofdthread om op te draaien. dat is de reden waarom als je een script in een lus uitvoert en het gebruikt om te ruilen, je de functie refresshrate() moet gebruiken. of het script zal nooit nieuwe gegevens zien. Als een EA of Script een indior aanroept met bijvoorbeeld de iCustom-functie, laadt het eigenlijk een tweede kopie van de indior op de achterkant van de EA's, dus hoe meer indior het aanroept, hoe meer code er op de achterkant van de EA wordt geladen, hoe langzamer het ea wordt uitgevoerd, zijn de indor op de kaart niet toegankelijk voor een EA. allemaal, dus ik merk dat je twee kaarten kunt openen met hetzelfde symbool en allemaal dezelfde binnenkanten in elk venster. dat slechts ��n venster tegelijk wordt bijgewerkt. Het venster met de verlichte titelbalk wordt als eerste uitgevoerd en de andere worden ��n voor ��n in z-volgorde uitgevoerd. Ik heb twee vensters met code geladen om de uitvoering te vertragen, om dit te controleren. Keit

  4. #24

    Quote Originally Posted by ;
    Zie ik zei in mijn eerste bericht, je bent een betere codeur dat; Ik mis de boot volledig op deze. Het lijkt erop dat u de buffers niet hoeft te vervuilen om ze te vullen. MT doet dat voor ons. Bekijk al deze dialogen die men ervoor kan leren, ik heb afdrukverklaringen toegevoegd om te zien wanneer een nieuwe balk wordt geopend, MT zal de gegevens terugzetten zonder enig werk van onze kant. En hier was ik voor niets loops aan het schrijven.
    Ik ben blij dat je het hebt opgelost. Wat handel en programmeren betreft, leer ik elke dag iets nieuws.
    Quote Originally Posted by ;
    Ik geloof echter niet dat de reden dat het aantal verwerkte tikken de reden is die u noemde (dat inkomende tikken tijdens de uitvoering van de speciale functie start() worden genegeerd). De tijd die nodig is om dit stuk code uit te voeren is minuscuul. Zelfs als je een lus maakt en ervoor zorgt dat de code 10.000 keer wordt uitgevoerd voor elke tik, en de tijd ervoor duurt, duurt het ongeveer 200 milliseconden: deze code hierboven kost mijn computer ongeveer 200 ms, dus 2/100 van een milliseconde per iteratie. Ik denk dat het te onwaarschijnlijk is dat er zoveel teken aankomen tijdens dit minuscule venster....
    Ja, je hebt helemaal gelijk. Deze eenvoudige bewoners hebben misschien 1 milliseconde nodig om een ??????tik te verwerken. Mijn beste gok is dat er een andere interne MT4-verwerking is (die plaatsvindt voordat/nadat onze interne startfunctie wordt uitgevoerd) die de vertraging veroorzaakt bij het verwerken van nieuwe tikken. Het is moeilijk te speculeren zonder de interne MT4-code te zien. Inkomende tikken worden waarschijnlijk ontvangen via een soort berichtenwachtrij. Ik denk dat Indiors hun eigen thread hebben voor executie. Ben niet zeker van EA's. Voor Indiors/EA's is er waarschijnlijk een minimale hoeveelheid overhead verbonden aan het verwerken van elke tik (buiten onze startfunctie om). Deze overhead kan 10 ms of 100 ms zijn, afhankelijk van de complexiteit van de grafieken. Ik wed dat de mql4.com-website wat informatie heeft over de dingen die gebeuren voor elke inkomende tik. Hoe dan ook, ik wed dat het antwoord daar ergens is... maar de uitleg is waarschijnlijk erg technisch en omvat berichtenwachtrijen en single/multi-threaded processen en gaat mijn begrip van MT4 ver te boven.

  5. #25

    Quote Originally Posted by ;
    Ok�, laten we het histogramgedeelte verwijderen. Het klopt nog steeds niet, de functieaanroep 'SetIndexEmptyValue()' stelt alleen de waarde van de buffer in als deze geen waarde heeft, en de init() functie wordt maar ��n keer uitgevoerd aan het begin van het programma. daarna wordt alleen de start()-functie uitgevoerd, totdat u deze stopt, wordt deinit() uitgevoerd bij het afsluiten, maar als u deze code uitvoert, is het enige dat de start()-functie doet, ��n toevoegen aan het nul-element van de buffer bij elke tik wordt dat element nooit leeggemaakt wanneer een nieuwe balk wordt geopend, dus wat je telt is elke ...
    Ja, als je zijn indior toevoegt, zet de speciale functie int init() gadblVolume[0] op 0. Dit doet hij maar ��n keer. Dan voegt het er voor elke tik daarna 1 aan toe. Wanneer een nieuwe kaars wordt gemaakt, wordt gadblVolume[0] weer op 0 gezet (MT doet dit zoals je in een later bericht zegt), en dan begint het weer met 1 te tellen bij elke tik. Mooi; maar ik zie het nut niet in om te weten hoeveel tikken MT niet ontvangt zonder te begrijpen WAAROM het ze niet ontvangt

  6. #26

    Quote Originally Posted by ;
    Keurig gedaan!
    Bedankt, blij dat je ze leuk vindt!
    Quote Originally Posted by ;
    - Sorry voor de afleiding hier. Een of meer van deze berichten worden verwijderd als u dat wilt.
    Dat is prima, maak je geen zorgen.
    Quote Originally Posted by ;
    Op een enigszins gerelateerde opmerking waarvan ik zeker weet dat je het hebt opgemerkt...
    Ja, ik heb er ook een, dacht alleen niet dat de meeste mensen er in ge�nteresseerd zouden zijn. Ik heb de mijne een beetje anders gedaan, hoewel ik nu de jouwe verkies omdat het veel eleganter is. Zo ziet de mijne eruit: Code ingevoegd #property copyright Gecodeerd door #property indior_chart_window int start() { static int TickCount; statische datum/tijd CandleOpenTime; if(CandleOpenTime!=Time#91;0#93 { CandleOpenTime=Time#91;0#93;; TickCount=0; } TickCount ; dubbel PercentageProcessed=(TickCount/Volume#91;0#93*100; Commentaar(DoubleToStr(Percentage verwerkt,1),%); terug(0); } Ik geloof echter niet dat de reden dat het aantal verwerkte tikken de reden is die u noemde (dat inkomende tikken tijdens de uitvoering van de speciale functie start() worden genegeerd). De tijd die nodig is om dit stuk code uit te voeren is minuscuul. Zelfs als je een lus maakt en de code 10.000 keer laat uitvoeren voor elke tik, en de tijd die het nodig heeft om dit te doen, duurt het ongeveer 200 milliseconden: Ingevoegde code #property copyright Gecodeerd door #property indior_chart_window int start() { int ms1=GetTickCount(); for(int i=0; ilt;10000; i ) { statisch int TickCount; statische datum/tijd CandleOpenTime; if(CandleOpenTime!=Time#91;0#93 { CandleOpenTime=Time#91;0#93;; TickCount=0; } TickCount ; dubbel PercentageProcessed=(TickCount/Volume#91;0#93*100; Commentaar(DoubleToStr(Percentage verwerkt,1),%); } int ms2=GetTickCount(); int Duur=ms2-ms1; Opmerking(Duur); terug(0); } Deze code hierboven kost mijn computer ongeveer 200 ms, dus 2/100 van een milliseconde per iteratie. Ik denk dat het te onwaarschijnlijk is dat er zoveel teken aankomen tijdens dit minuscule venster. Ik zou graag willen weten waarom het Volume[] != aantal tikken is.

  7. #27
    zznbrm Zie ik zei in mijn eerste bericht, je bent een betere codeur dat; Ik mis de boot volledig op deze. Het lijkt erop dat u de buffers niet hoeft te vervuilen om ze te vullen. MT doet dat voor ons. Bekijk al deze dialogen die men ervoor kan leren, ik heb afdrukverklaringen toegevoegd om te zien wanneer een nieuwe balk wordt geopend, MT zal de gegevens terugzetten zonder enig werk van onze kant. En hier was ik voor niets loops aan het schrijven. Keit

  8. #28

    Quote Originally Posted by ;
    Ok�, laten we het histogramgedeelte verwijderen. Het klopt nog steeds niet, de functieaanroep 'SetIndexEmptyValue()' stelt alleen de waarde van de buffer in als deze geen waarde heeft, en de init() functie wordt maar ��n keer uitgevoerd aan het begin van het programma. daar nadat alleen de start()-functie wordt uitgevoerd, totdat u deze stopt, wordt deinit() uitgevoerd bij afsluiten,
    Ja, dat klopt.
    Quote Originally Posted by ;
    maar als je deze code uitvoert, is het enige dat de start () -functie doet, ��n toevoegen aan het nul-element van de buffer bij elke tik, het leegt dat element nooit wanneer een nieuwe balk wordt geopend, dus wat je telt is elke tik ...
    Nou, ik weet niet wat ik je moet vertellen... het werkt precies zoals het zou moeten voor mij. Voeg de indior toe aan een M1-diagram en ik weet zeker dat je zult zien dat het de tikken per maat telt zoals verwacht.

  9. #29
    Ok�, laten we het histogramgedeelte verwijderen. Het klopt nog steeds niet, de functieaanroep 'SetIndexEmptyValue()' stelt alleen de waarde van de buffer in als deze geen waarde heeft, en de init() functie wordt maar ��n keer uitgevoerd aan het begin van het programma. daarna wordt alleen de start()-functie uitgevoerd, totdat u deze stopt, wordt deinit() uitgevoerd bij het afsluiten, maar als u deze code uitvoert, is het enige dat de start()-functie doet, ��n toevoegen aan het nul-element van de buffer bij elke tik wordt dat element nooit leeggemaakt wanneer een nieuwe balk wordt geopend, dus wat u telt is elke tik die binnenkomt vanaf het moment dat het programma is gestart. en blijft toevoegen totdat het stopt. dus je krijgt geen echt aantal tikken per balk terwijl je tikken krijgt terwijl het programma aan staat, Keit

  10. #30

    Quote Originally Posted by ;
    Ik begrijp nu iets meer van wat je doet, maar ik ben nog steeds in de war, maak je een histogram van de gegevens zoals in een geschiedenis of alleen de open balk en negeer je elke geschiedenis. als je alleen naar de open balk kijkt, moet je die buffer nog steeds op nul zetten aan het begin van elke balk, of zit ik hier nog steeds in het bos, zoals de code je gaat toevoegen aan slechts ��n element terwijl de indie draait, ik dacht dat je de tikken per maat aan het tellen was?? Keit
    rooicol - Sorry voor de afleiding hier. Een of meer van deze berichten worden verwijderd als u dat wilt. CockeyedCowboy - Ok�... ik begrijp wat je nu zegt. Het histogram wordt niet gebruikt voor deze oefening...de buffergegevens zijn het belangrijkste stuk. Ik kopieerde gewoon een oud (heel eenvoudig) interieur dat een histogram tekende, maar schonk er helemaal geen aandacht aan. Ook geschiedenis doet er niet toe voor dit interieur. Aangezien er geen tikgeschiedenis is in MT4, zijn alle gegevens uit het verleden irrelevant. Nu, naar je belangrijkste vraag (denk ik) over het op nul zetten van de buffer voor een nieuwe balk. Deze regel in de init zorgt daarvoor: SetIndexEmptyValue( 0, 0.0 ); Zonder die regel wordt de bufferwaarde voor elke nieuwe balk ge�nitialiseerd naar wat de maximale integerwaarde lijkt te zijn. Maar met deze regel erin, wordt de bufferwaarde voor elke nieuwe balk op nul ge�nitialiseerd. Is dat de juiste manier om elke balk op 0 te initialiseren? Misschien niet, maar voor deze oefening lijkt het te werken. We hebben het hier niet over een productiegereed interieur. Dit is gewoon een basic interieur om even snel iets uit te testen. U kunt het histogramgedeelte ervan verwijderen en gewoon deze code uitvoeren: Code ingevoegd #property indior_chart_window #property indior_buffers 1 double gadblVolume#91;#93;; int init() { IndiorShortName( LiveVolume); IndiorDigits( 0 ); SetIndexBuffer( 0, gadblVolume); SetIndexLabel( 0, Live Volume); SetIndexStijl( 0, DRAW_NONE); SetIndexLegeWaarde( 0, 0.0 ); terug(0); } int start() { gadblVolume#91;0#93; = 1,0; terug(0); }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.