Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Εννοώ πως είναι πολύ καλά μορφοποιημένα τα data ανά τύπο αρχείου, και κάπου πιο πάνω είπες πως ούτε η σειρά των στηλών αλλάζει ούτε μπορεί να λείπουν στήλες.

 

Αν το πλήθος των τύπων αρχείων κυμαίνεται σε λογικά πλαίσια (από 2 έως 10) αντί για regex και groups θα μπορούσες να κάνεις πιστεύω τη ζωή σου πολύ πιο εύκολη και να φτιάξεις τόσους parsers όσοι είναι  οι τύποι αρχείων. Και στο dialog να έχεις ένα πεδίο-λίστα με τους τύπους αρχείου για να διαλέξει ο χρήστης τι θα παρσάρει (αντί δηλαδή για το πεδίο "Group" που τώρα τον βάζεις να γράφει patterns, κωδικούς δηλαδή για τις στήλες).

 

Νομίζω θα είναι πιο εύκολο και για σένα και για τους χρήστες σου.

Δημοσ.

Κάτσε να τα βάλουμε σε μια σειρά, για να δούμε αν έχω καταλάβει σωστά τι θέλεις να κάνεις.

 

1. Έχεις διάφορα αρχεία απλού κειμένου ως input, τα οποία είναι όλα τους well-formatted* και ουσιαστικά σε 1ο επίπεδο διαφέρουν μεταξύ τους ως προς το πλήθος στηλών τους, και σε 2ο επίπεδο ως προς το είδος της πληροφορίας που αντιστοιχεί σε κάθε στήλη.

 

2. Οι τύποι αρχείων δεν έχουν ίδιους delimiters πρώτου επιπέδου, και σε 2ο επίπεδο αλλάζουν και οι locale depended delimiters.

 

3. Θέλεις να φτιάξεις ένα πρόγραμμα που να παρσάρει οποιονδήποτε από αυτούς τους τύπους αρχείων, αλλά να τραβάει διαφορετικού είδους πληροφορίες  (εσωτερικές μεταβλητές υποθέτω) ανάλογα με τον τύπο του αρχείου.

 

4. Επειδή είναι δύσκολο (ή και αδύνατο λόγω έλλειψης ικανών πληροφοριών μέσα στα αρχεία) να αναγνωρίζει το πρόγραμμα αυτόματα τον τύπο του αρχείου, μεταφέρεις αυτό το κομμάτι της "ευθύνης" στο χρήστη, ζητώντας του ουσιαστικά να συμπληρώσει τις πληροφορίες που αν υπήρχαν μέσα στο αρχείο θα σου επέτρεπαν αυτόματη αναγνώριση του τύπου του.

 

*Well-formatted: ο κάθε τύπος αρχείου είναι συνεπής ως προς τη μορφή των περιεχομένων του, δηλαδή οι στήλες δεν αλλάζουν σειρά, δεν γίνεται να λείπει κάποια στήλη και κάθε γραμμή περιέχει τιμές σε όλες τις στήλες.

 

Αν όλα τα παραπάνω τα έχω καταλάβει σωστά, η βασική μου ερώτηση είναι πως διαχειρίζεσαι εσωτερικά τις πληροφορίες που διαβάζεις από έναν οποιονδήποτε τύπο αρχείου. Αν δηλαδή ένας τύπος αποτελείται από 6 στήλες κι ένας άλλος από 10, και συνήθως με διαφορετικό είδος πληροφοριών στις στήλες, πως το διαχειρίζεσαι εσωτερικά;

 

Διότι υποθέτω πως τις πληροφορίες που παίρνεις από κάθε στήλη τις επεξεργάζεσαι περαιτέρω, αλλιώς δεν θα είχε νόημα.

 

Οπότε, σε τι είδους δομή αποθηκεύεις εσωτερικά τις πληροφορίες που διαβάζεις; Η απάντηση εδώ είναι πιστεύω κρίσιμη, για να καταλάβω εγώ τουλάχιστον τι παίζει, και να μπορέσω (αν μπορέσω) να βοηθήσω περαιτέρω.

Δημοσ.

Λοιπον, φτιανχω ενα προγραμμα τεχνικης αναλυσης.

 

Αυτου του ειδος προγραμματων παιρνουν δεδομενα δεικτων. Αυτα τα δεδομενα ειναι στανταρ, δηλαδη σε μια χρονικη στιγμη θα εχεις μια τιμη με εναν ογκο που ειναι μια πραξη. 

 

Αυτο που δεν ειναι στανταρ, ειναι το πως θα στα σερβιρουν. Για αυτο και θελω εναν configurable parser και οχι 24321312312 hardcorded

 

Η δομη που εχω, (πουεχουν ολοι δηλαδη) ειναι το ohlc που ειναι ενα scale πραξεων. Πχ απο 100 πραξεις σε ενα dt, το o (open) παιρνει την τιμη της πρωτης, το h(high) την μεγιστη, το l (low)... c(close).. το volume ειναι το συνολο των volume.

Δημοσ.

Άντε γεια! :lol:

 

Επειδή δεν έχω ασχοληθεί ποτέ μου με τέτοια, κι επειδή βλέπω πως θέλει πολύ διάβασμα για να πάρω μυρωδιά του τι παίζει (κάτι που δεν μπορώ να κάνω αυτό το καιρό), δυστυχώς δεν μπορώ να βοηθήσω (ούτε καν για δική μου εκπαίδευση, μιας και μου φάνηκε ιδιαίτερα ενδιαφέρων ο τομέας) :(

Δημοσ.

Ξαναβλέποντάς το λίγο πιστεύω ότι μια χαρά μπορεί να δουλέψει το αυτόματο detection για delimiters και formats (εγώ έτσι θα το έκανα). Μετά το πρόβλημά σου είναι η σειρά εμφάνισης των δεδομένων (πχ OHLCV ή HLOCV κλπ) αλλά ακόμα και εκεί μπορείς να κάνεις αυτόματο detection που δουλεύει τις περισσότερες φορές:

  • το V είναι αυτό το νούμερο του οποίου το άθροισμα των τετράγωνων των διαφορών του από τα υπόλοιπα 4 είναι το μεγαλύτερο
  • τα HL προκύπτουν συγκρίνοντας τα υπόλοιπα 4 νούμερα μεταξύ τους
  • αν υπάρχει αμφιβολία σε οτιδήποτε (π.χ. αν O = H) τότε εξετάζοντας περισσότερα data points μπορεί να ξεκαθαριστεί

Επομένως όπως το βλέπω μπορείς να κάνεις άνετα έναν πλήρως αυτόματο 2-phase parser όπου στο 1ο phase κάνει το detection και στο δεύτερο parsing. Για το detection μπορείς να ξεκινήσεις με όλες τις μεταθέσεις των 5 μεταβλητών (120 στο σύνολο, δεν είναι πολλές) και σε κάθε γραμμή που βλέπεις αποκλείεις όλες αυτές που σίγουρα δε μπορεί να ισχύουν. Αν φτάσεις στο τέλος της εισόδου και σου έχει μείνει μόνο 1 είσαι τσολιάς, αν δεν έχει μείνει καμία τότε ο αλγόριθμος χρειάζεται βελτίωση και αν έχουν μείνει περισσότερες από 1 (σπάνιο το βλέπω) τότε μπορεί να χρειαστεί manual input.

 

Μετά ξαναπερνάς μία όλη την είσοδο ξέροντας πλέον το format και η δουλειά έγινε.

 

Είναι λίγο engineering-happy αυτή η προσέγγιση αλλά καταλαβαίνεις τώρα, το να έχεις μετά στα χέρια σου το full auto εργαλείο έχει τη χάρη του.

 

Μπορείς επίσης να βάλεις inputs για τυχόν συνιστώσες του date/time που δεν εμφανίζονται στο data set, το οποίο θα κάνει default στο "σήμερα 00:00".

 

Τόση ώρα που τα γράφω αυτά ηδονίζομαι και μόνο με την ιδέα οπότε ψήσου και κάνε υλοποίηση... :P

 

 

 

Κάποια στιγμή είχα γράψει ένα internal tool στο οποίο μετά από πολλή σκέψη είχα καταφέρει ο χρήστης να χρειάζεται να δώσει manually μόνο 1 πεδίο από αυτά που χρειαζόταν για να γίνει η δουλειά, στα υπόλοιπα δούλευε καλά auto-detection. Και κάποια στιγμή έρχεται χρήστης και μου λέει "πολύ καλή φάση που συμπληρώνω ένα μόνο πεδίο, η δουλειά γίνεται πολύ εύκολα -- μήπως όμως μπορείς να το κάνεις κάπως να μη συμπληρώνω κανένα;" :P

 

Και του το έκανα τελικά (στο common case μόνο αλλά αυτό ήταν το 95% του συνόλου). Ηδονή σου λέω.

 

 

Δημοσ.

Κοιτα, το προγραμμα ειναι για μενα. Εαν βγει καλο, τοτε θα το δωσω και στο κοσμο.

Αρα προς το παρον, ειμαι μια χαρα με #11. Τι μια χαρα, αρχοντας ειμαι, εξαλλου ειναι drop box, και οτι veiled μπαινει, αυτο αποθηκευεται. Ετσι κανω paste το url και μετα παταω το dropbox και βαζω το αναλογο "regex" που ειναι πιο περιγραφικο απο το (\d*.\d*);(\d*.\d*)........

 

Θα το δω στο μελλον. Προς το παρον εχω τερατωδες προβλημα με το chart .

Δημοσ.

Καλή φάση πάντως πάπι! Υπάρχει κάποιο link με στανταρισμένες υλοποιήσεις δομών για διαχείριση ohlc δεδομένων, να το ψάξω κι εγώ όταν ευκαιρήσω; ... δλδ σε καμιά 10αριά μέρες κι εάν :( )

Δημοσ.

Δεν ξερω αν υπαρχουν ολοι καπου μαζι. google technical analysis indicators

πχ ενας γνωστος ειναι ο SMA(n) 

οπου για να "βγαλεις" το σημειο x, θα παρεις τα n ποηγουμενα, θα τα προσθεσεις και το αποτελεσμα θα το διαιρεσεις με το n.

 

πχ εγω το εχω υλοποιησει ετσι

namespace ta{
		


	SimpleMovingAverage::SimpleMovingAverage():
		value(1)
	{
	}


	SimpleMovingAverage::~SimpleMovingAverage()
	{
	}


	//todo perf
	void SimpleMovingAverage::Calc()
	{
		Buffer::VectorType const& input = this->pInput->As<Buffer*>()->GetData();
		Buffer::VectorType& output = this->pOutput->As<Buffer*>()->GetData();
		output.resize(input.size());
		unsigned int i		= this->value;
		unsigned int len	= input.size();
		if(this->pVisualParent)
		{
			auto bounds			= this->pInput->GetBounds(this->pVisualParent->As<Visual*>());
			i += bounds.first;
			len= bounds.last;
		}
		
		for(; i < len; i++)
		{
			float sma = 0.f;
			for(unsigned int j = i - this->value; j < i; j++)
			{
				sma += input[j].close;
			}
			output[i] = input[i];
			output[i].high = sma / float(this->value);
			float s = sma / float(this->value);

		}

	}

	//interface
	void SimpleMovingAverage::SetValue(unsigned int val)
	{
		this->value = val;
	}
	unsigned int SimpleMovingAverage::GetValue()
	{
		return this->value;
	}
}

και εχω αυτη την γκρι γραμμουλα που ειναι ενας sma(25)

 

post-216584-0-58599200-1386775721_thumb.png

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...