Tuesday 10 October 2017

Forex Sql Databas


MetaTrader 5 - Integration Så här öppnar du MySQL-databasen från MQL5 (MQL4) Introduktion Problemet med interaktion mellan MQL och databaser är inte nytt, men det är fortfarande relevant. Användning av databaser kan kraftigt förbättra MetaTrader: möjligheter att lagra och analysera prishistoria, kopiera affärer från en handelsplattform till en annan, tillhandahålla quotestrades i realtid, stora analytiska beräkningar på serverns sida och eller använda schema, övervakning och fjärrkontroll av konton som använder webbteknik. Hur som helst, det var många försök att dra nytta av kombinationen av MQL och MySQL, vissa lösningar finns tillgängliga i CodeBase. Till exempel MySQL wrapper-bibliotek för MetaTrader 4 är projektet, varifrån många programmerare startar egna utvecklingar med ytterligare tillägg. Enligt min åsikt är en av nackdelarna med denna lösning fördelning av speciella uppsättningar för att läsa data från databasen. Ett annat projekt MySQL logger 1 - EA för MetaTrader 4 är högspecialiserat, det använder ingen wrapper för att komma åt standardbiblioteket libmysql. dll. Därför fungerar det inte i MetaTrader4 Build 600, eftersom karaktärstyperna har ersatts av wchart. och användningen av int-typen istället för TMYSQL-strukturens pekare medför att minnet läcker i projektet (det tilldelade minnet kan inte styras). Ett annat intressant projekt är EAXMysql - MySQL bibliotek - bibliotek för MetaTrader 5. Det är en ganska bra implementering. Listan över nackdelar som anges av författaren innebär vissa begränsningar för dess användning. Alla som någonsin behöver använda databaser i sina MQL-projekt har två alternativ: antingen att utveckla sin egen lösning och känna varje enskild del av det, eller använda någon tredjepartslösning, lära sig hur man använder den och upptäcka alla dess fel som kan hindra deras projekt. Jag mötte en sådan nödvändighet och de två alternativen samtidigt som jag utvecklade en ganska komplex handelsrobot. Efter att ha sökt igenom befintliga projekt och studerat ett mycket stort antal lösningar insåg jag att det inte fanns några genomförda implementeringar som kunde hjälpa min handelsrobot till den professionella nivån. Dessutom var det också absurda lösningar, till exempel: DMLDDL-operationer (insertupdatedelete data, createdrop-objekt i databasen) utfördes med standard libmysql. dll, och datavalg (SELECT) genomfördes faktiskt som en HTTP-begäran (med inet. dll) till ett PHP-skript som finns på webbservern på MySQL-serverns sida. SQL-frågorna skrevs i PHP-skriptet. Med andra ord, för att köra projektet behövde man behålla följande komponenter, konfigurerade och köra: MySQL-server, ApacheIIS-webbserver, PHPASP-skript på serverns sida. En kombination av ganska många tekniker. Naturligtvis kan det under vissa omständigheter vara acceptabelt, men när den enda uppgiften är att välja data från databasen - det här är nonsens. Dessutom stöder en sådan besvärlig lösning tidskrävande. De flesta lösningarna hade inga problem med att infoga data, skapa objekt och liknande. Problemet var datautväljning, eftersom uppgifterna skulle returneras till anropsmiljön. Jag trodde att använda arrays för detta ändamål var opraktiskt och obekvämt, helt enkelt för att under utvecklingdebuggingssupport av huvudprojektet, kan valda sökfrågor till databasen ändras, samtidigt som du också bör kontrollera rätt minnesallokering för arraysna. Tja, det kan och måste undvikas. Den nedan beskrivna MQL lt-gt MySql-gränssnittet baseras på en typisk metod som används i Oracle PLSQL, MS SQL T-SQL, AdoDB-användning av markörer. Detta gränssnitt utvecklades inriktat på enkel programmering och underhåll, plus ett minimum av komponenter. Det implementeras som en DLL-omslag till standardbiblioteket libmysql. dll och en uppsättning gränssnittsfunktioner som en. mqh-fil. 1. MQL lt-gt MySQL-gränssnittet Samverkan mellan MetaTrader-terminalen (genom MQL-program) kan implementeras med hjälp av följande komponenter: 1. Gränssnittsbiblioteket MQLMySQL. mqh. Det läggs till i projektet med hjälp av katalogen och kan ändras till din smak. Den innehåller direktiverna för att importera funktioner i MQLMySQL. dll-dynamiska biblioteket, samt funktioner för att ringa dem och hantera fel. 2. Det dynamiska biblioteket MQLMySQL. dll. Det är ett omslag för att komma åt funktionaliteten för standardbiblioteket libmysql. dll. MQLMySQL. dll-biblioteket behandlar också resultaten av operationer och delad åtkomst till databasanslutningarna och markörerna. Det betyder att du kan skapa och använda flera anslutningar i taget (från ett eller flera MQL-program), behåll några få markörer öppna, med frågor till en eller flera databaser. Mutexes används för att skilja åtkomsten till delade resurser. 3. Standarddynamikbiblioteket libmysql. dll är en inbyggd åtkomstdrivrutin. Du kan kopiera den från en MySql-databasfördelning i C: WindowsSytem32 eller ltTerminalgtMQL5Libraries (för MetaTrader 4 i ltTerminalgtMQL4Libraries). Det är faktiskt ansvaret för att skicka frågor till databasen och hämta resultaten. Låt oss döma de viktigaste punkterna, till exempel: att öppna anslutningen, utföra DMLDDL-frågor och datavalning. 1,1. Öppna och avsluta anslutningen MySqlConnect-funktionen har implementerats för att ansluta till MySQL-databasen: Den här funktionen implementerar anslutning till databasen och returnerar en anslutningsidentifierare. Detta ID kommer att krävas för att fråga databasen. Vid anslutningsfel är returvärdet -1. För felinformationen, kolla variablerna MySQLErrorNumber och MySqlErrorDescription. Vanligtvis kallas denna funktion när man hanterar OnInit () - händelsen i MQL-programmet. DNS-namnet eller IP-adressen till MySQL-servern Databasanvändare (till exempel root) Databasens användares namn Databasens namn TCPIP-porten i databasen (vanligtvis 3306) Unix-uttaget (för Unix-baserade system) kombination av speciella flaggor (vanligtvis 0) MySqlDisconnect-gränssnittsfunktionen har implementerats för att stänga anslutningen: Den här funktionen stänger anslutningen med MySQL-databasen. Vanligtvis kallas denna funktion när man hanterar OnDeinit () - händelsen i MQL-programmet. Det bör noteras att MySQL-databasen kan stänga anslutningen på egen hand i händelse av maskinvarufel, nätverksstockning eller timeout (när inga frågor skickas till databasen under en längre tid). Ofta använder utvecklare OnTick () - händelsen för att skriva data till databasen. Men när helg kommer och marknaden är stängd, är anslutningen fortfarande hängande. I det här fallet stänger MySQL efter timeout (standard är 8 timmar). Och på måndagen, när marknaden är öppen, hittas fel i projektet. Därför rekommenderas det starkt att kontrollera anslutningen och eller återansluta till databasen efter ett tidsintervall som är mindre än tidsintervallet som anges i MySQL-serverns inställningar. 1,2. Utförande av DMLDDL-frågor DML-operationer används för dataprofilering (D ata M anipulation L anguage). Data manipuleringar inkluderar följande uppsättning uttalanden: INSERT, UPDATE och DELETE. DDL-operationer används för datadefinition (D ata D efinition L anguage). Detta inkluderar skapandet (CREATE) av databasobjekt (tabeller, visningar, lagrade procedurer, utlösare, etc.) och deras modifiering (ALTER) och borttagning (DROP). Dess inte alla DMLDDL uttalanden, DCL (D ata C ontrol L anguage) används för att skilja åt åtkomst åtkomst, men vi kommer inte att dyka in i funktionerna i SQL. Någon av dessa kommandon kan utföras med hjälp av MySqlExecute-gränssnittsfunktionen: Som en SQL-fråga kan du också använda kommandot USE för att välja databasen. Jag skulle vilja nämna användningen av flervalsfrågor. Det är en uppsättning SQL-kommandon som är åtskilda av tecknet. För att aktivera flersatsläget, ska anslutningen till databasen öppnas med fliken CLIENTMULTISTATEMENTS: I detta fragment läggs 3 poster i EURUSD-tabellen med ett enda samtal till databasen. Var och en av frågorna som lagras i SQL-variabeln separeras av. Detta tillvägagångssätt kan användas för frekvent insertupdatedelete en uppsättning nödvändiga kommandon kombineras i ett paket, vilket lindrar nätverkstrafiken och förbättrar databasprestandan. INSERT-syntaxen i MySQL är ganska välutvecklad när det gäller undantagshantering. Om uppgiften exempelvis är att flytta prishistoriken, bör en tabell skapas för valutapar med den primära nyckeln i datetime typen, eftersom datumet och tiden för en stapel är unika. Dessutom bör det kontrolleras om uppgifterna på en viss streck finns i databasen (för att förbättra stabiliteten i data migrationen). Med MySQL krävs inte denna kontroll, eftersom INSERT-satsen stöder ON DUPLICATE KEY. I enklare ord, om ett försök gjorts för att infoga data och tabellen redan har en post med samma datum och tid, kan INSERT-satsen ignoreras eller ersättas med UPDATE för den här raden (se. Dev. mysqldocrefman5.0eninsert - på-duplicate. html). 1,3. Data Selection SQL SELECT-satsen används för att hämta data från databasen. Nedanstående sekvens av åtgärder används för att välja data och hämta urvalsresultatet: Förbereda SELECT-satsen. Öppnar markören. Få det antal rader som returneras av frågan. Looping och hämtar varje rad av frågan. Hämtar data till MQL-variablerna i slingan. Stänger markören. Det här är naturligtvis ett allmänt system, så inte alla operationer krävs för varje enskilt fall. Om du till exempel vill se till att en rad finns i tabellen (med några kriterier), räcker det med att förbereda en fråga, öppna en markör, få antalet rader och stäng markören. Faktum är att de obligatoriska delarna är - förbereder SELECT-satsen, öppnar och stänger markören. Vad är en markör Det här är en referens till sammanhangsminnesområdet, i själva verket - den resulterande uppsättningen värden. När du skickar SELECT-frågan avsätter databasen minne för resultatet och skapar en pekare i en rad som du kan flytta från en rad till en annan. Således är det möjligt att få tillgång till alla rader i en kös ordning som definieras av frågan (ORDER BY-klausulen i SELECT-satsen). Följande gränssnittsfunktioner används för datavalning: Öppna markören: Markörsidentifieraren returnerad av MySqlCursorOpen Att stänga en markör är en kritisk operation. Glöm inte att stänga markörer. Tänk dig att öppna markören och glömma att stänga den. Antag att data hämtas till markören med varje kryssning vid hanteringen av OnTick () - händelsen, och varje gång en ny markör öppnas tilldelas minne för det (både på klientsidan och på serversidan). Vid någon tidpunkt kommer servern att neka tjänsten eftersom gränsen för öppna markörer nås, och detta kan orsaka buffertflöde. Naturligtvis är det överdriven, ett sådant resultat är möjligt när du arbetar direkt med libmysql. dll. Men det dynamiska biblioteket MQLMySQL. DLL distribuerar minne för markörer och kommer att vägra att öppna en markör som går utöver den tillåtna gränsen. När man genomför verkliga uppgifter är det tillräckligt att hålla 2-3 markörer öppna. Varje markör kan hantera en kartesisk mätning av data med hjälp av två tre markörer samtidigt (kapslade, till exempel när en parametriskt beror på en annan markör) täcker två eller tre dimensioner. Det här är perfekt för de flesta uppgifter. Dessutom kan du för att implementera komplext datavalning alltid använda dessa objekt för att representera databasen (VISA), skapa dem på serverns sida och skicka frågor till dem från MQL-koden till tabeller. 1,4. Ytterligare information Följande kan nämnas som ytterligare funktioner: 1.4.1. Läsning av data från en. INI-fil Ofta lagring av information om anslutningar till databasen (IP-adress för servern, porten, användarnamnet, lösenordet etc.) direkt i koden MQL (eller parametrarna för Expert Advisor, indikator för manus) är inte rationell, eftersom servern kan flyttas, dess adress kan ändras dynamiskt, etc. Du måste ändra MQL-koden i det här fallet. Således bör alla dessa data bättre lagras i standard. INI-filen, medan endast dess namn ska skrivas i MQL-programmet. Använd sedan ReadINI-funktionen för att läsa anslutningsparametrar och använda dem. Exempelvis innehåller INI-filen följande information: För att få serverns IP-adress, kör följande: INI-filen är placerad i C: MetaTrader5MQL5Experts och heter MyConnection. ini, du får tillgång till serverns nyckel i MYSQL-avdelningen. I en INI-fil kan du lagra inställningar till olika servrar som används i ditt projekt. 1.4.2. Spåra problemområdena I gränssnittsbiblioteket finns spårläget, vilket kan aktiveras för att felsöka SQL-frågor var som helst i ett MQL-program. Ange följande i problemområdet: Om du aktiverar spårning i början av MQL-programmet och inte inaktiverar det, loggas alla samtal till databasen. Loggen hålls i terminalkonsolen (med kommandot Skriv ut). 2. Exempel I det här avsnittet beskrivs några exempel på anslutning och användning av de utvecklade biblioteken. Se dem och uppskatta användbarheten av programvarulösningen. MySQL-003.mq5-exemplet visar följande: Anslutning till en databas (anslutningsparametrar lagras i. ini-filen), skapa en tabell, infoga data (även med flera satser) och koppla från databasen. Exempel MySQL-004.mq5 visar val av data från en tabell skapad av MySQL-003.mq5-skriptet. Ovanstående exempel innehåller den typiska felhanteringen som används i verkliga projekt. Faktum är att varje fråga som används i ett MQL-program ska debuggeras i en MySQL-klient (PHPMyAdmin, DB Ninja, MySQL-konsolen). Jag använder personligen och rekommenderar professionell programvara för databasutveckling Quest TOAD för MySQL. Slutsats Den här artikeln beskriver inte detaljerna för implementeringen av MQLMySQL. DLL som utvecklats i Microsoft Visual Studio 2010 (CC) - miljön. Denna mjukvarulösning är avsedd för praktisk användning och har över 100 framgångsrika implementeringar inom olika områden av MQL-mjukvaruutveckling (från skapandet av komplexa handelssystem till webbpublicering). Versionerna av biblioteken för MQL4 och MQL5 finns bifogade nedan. Bilagorna innehåller också en zip-fil med källkoden för MQLMySQL. DLL Dokumentation ingår i arkiven För att använda exemplen, glöm inte att ange parametrarna för anslutningen till din databas i filen ScriptsMyConnection. ini. need råd re: Forex data feed till SQL Server obesvarad: behöver råd re: Forex data feed till SQL Server Har någon erfarenhet av att mata realtids Forex data till SQL Server Jag försöker lära mig mer om detta så jag kan göra lite analys i SQL. Det verkar som om många leverantörer stöder något som heter DDE, vilket är en anslutning till MSFT Excel eller de ger ett API för att få tillgång till data för att bygga en applikation i C eller något liknande. Om du känner till en tjänst som gör övergången till tabeller på en SQL Server som skulle vara idealisk. Eftersom min förte är SQL Server, Id, går det inte heller C-rutten plus det är oklart hur jag ska analysera data, jag behöver ringa för varje transaktion under de senaste timmarna och sedan programmera det i SQL-tabeller så jag kan analysera verkar som mycket överhead, även DDE låter inte mycket bättre, det verkar som en dumbed down-tillvägagångssätt och skulle hellre bara ta itu med de råa data som kan ses samtidigt W little UI overhead. Det här låter nästan som en tjänstemäklare lekplats. Jag stödde en gång google messaging med servicemäklare-baserad arkitektur. Allt ligger på samtal med webservice. Du måste ta reda på vad kommunikationsprotokollet du förväntas följa. Om dataformat är proprietärt (vilket jag hoppas det är, eftersom det är ett handelssystem), kan du behöva lära dig några C att prata med dekrypteringsbiblioteket via CLR-funktioner innan du laddar in data i tabellerna. Eftersom min förte är SQL Server, Id, går det snarare inte C-rutten Om du vill behålla SQL som din quotfortequot, börjar du gräva dig mer in i C, och till PowerShell citationstecken. Data i en post beror på nyckeln till posten, hela tangenten , och ingenting annat än nyckeln, så hjälp mig Codd. quotExecute SQL från Metatrader Ive sett ett par trådar om att använda databaser i Metatrader, men jag har inte sett något specifikt om att ansluta till en Microsoft SQL Server. Så jag trodde Id satte ihop en snabb handledning om hur man gör det om någon vill göra något liknande. Denna process ska fungera för alla datakällor som kan nås via ADOODBCOLE DB (SQL, Access, Excel, etc.) Följande kodsedlar är lite tekniska och kräver viss grundläggande kodningskunskap. För denna uppgift började jag med Experimentprovprov C-projektet i din Metatrader-mapp expertssamplesDLLSample. Jag ville inte börja från början och hitta den rätta typen av COM-bibliotek för att bygga, så jag använde helt enkelt detta provprojekt. När du har öppnat projektet (du behöver Visual Studio), är du redo att använda SQL i 4 enkla steg 1) Lägg till en referens till de ADO-dlls som finns på toppen av din ExpertSample. cpp-sida, så här: importera C: Program FilesCommon FilesSystemADOmsado15.dll icke-namnskala omnamn (EOF, EndOfFile) 2) Sedan är du redo att lägga till ExecuteScalar-metoden i din kod. Den här funktionen returnerar bara ett värde från SQL. (Metatrader kan bara ta emot grundläggande datatyper). MT4EXPFUNC char stdcall ExecuteScalar (char strSQL) HRESULT hr SOK Definiera strängvariabler. bstrt strCnn (MYCONNECTIONSTRING) anslutningssträngar för mer info RecordsetPtr pRstAuthors NULL Call Skapa instans för att omforma uppspelningsuppsättningsfel ERROR: Misslyckades med att skapa rekorduppsättningsförekomst Öppna inspelningsuppsättningen för att få poster från Författartabellen pRstAuthors-Open (strSQL, strCnn, adOpenStatic, adLockReadOnly, adCmdText) fångst (comerror ce1) returnera FEL: Det går inte att öppna SQL Server MQL och databaser Har någon känt till ett sätt att ansluta till en databas från MT4 Jag föreställer mig att det skulle behöva vara en extern DLL, eftersom det inte ser ut som det finns en data access laryer inbyggd i MQL men det borde inte vara så svårt att sätta ihop. Men innan jag gör det undrade jag det här är en där ute någonstans. Vad jag hade i åtanke var en generisk ODBC - eller OLEDB-anslutningstyp så att den kunde användas med flera DBMS-enheter. MQL amp Databaser Ja, du behöver en extern DLL för att göra det här arbetet för dig. Om du inte har någon erfarenhet av C, ta en titt på Powerbasic. Powerbasic kan skapa DLL-filer som kan användas i MT4 och dess syntax är lätt att förstå. Hej, jag försöker följa denna handledning om hur man ansluter till sql-servern. I följande katalog - C: Program FilesCommon FilesSystemADO - Jag har serveral. dll-filer. Jag har följande: Det finns få andra, men alla har ado i titeln. Kan någon berätta för mig vilken man jag ska använda också Kan någon ge ett exempel på att lägga till anslutningssträngen. Och det här exemplet är också extremt grundläggande - det verkar faktiskt som ett Northwinds-exempel. Har någon några exempel på att få kryssningar från MT och lagra dem i MS SQL Server, har någon - eller någon - framgångsrikt använt MS SQL-servern med Metatrader Om så är fallet, kan du snälla granska ovanstående handledning och kanske ge några tillägg eller förbättringar . Ive sett ett par trådar om att använda databaser i Metatrader, men jag har inte sett något specifikt om att ansluta till en Microsoft SQL Server. Så jag trodde Id satte ihop en snabb handledning om hur man gör det om någon vill göra något liknande. Denna process ska fungera för alla datakällor som kan nås via ADOODBCOLE DB (SQL, Access, Excel, etc.) Följande kodsedlar är lite tekniska och kräver viss grundläggande kodningskunskap. För denna uppgift började jag med Experimentprovprov C-projektet i din Metatrader-mapp expertssamplesDLLSample. Jag ville inte börja från början och hitta den rätta typen av COM-bibliotek för att bygga, så jag använde helt enkelt detta provprojekt. När du har öppnat projektet (du behöver Visual Studio), är du redo att använda SQL i 4 enkla steg 1) Lägg till en referens till de ADO-dlls som finns på toppen av din ExpertSample. cpp-sida, så här: importera C: Program FilesCommon FilesSystemADOmsado15.dll icke-namnskala omnamn (EOF, EndOfFile) 2) Sedan är du redo att lägga till ExecuteScalar-metoden i din kod. Den här funktionen returnerar bara ett värde från SQL. (Metatrader kan bara ta emot grundläggande datatyper). MT4EXPFUNC char stdcall ExecuteScalar (char strSQL) HRESULT hr SOK Definiera strängvariabler. bstrt strCnn (MYCONNECTIONSTRING) anslutningssträngar för mer info RecordsetPtr pRstAuthors NULL Call Skapa instans för att omforma uppspelningsuppsättningsfel ERROR: Misslyckades med att skapa rekorduppsättningsförekomst Öppna inspelningsuppsättningen för att få poster från Författartabellen pRstAuthors-Open (strSQL, strCnn, adOpenStatic, adLockReadOnly, adCmdText) fångst (comerror ce1) returnera FEL: Det går inte att öppna SQL Server 4) När du väl har lagt till din kompilerade DLL i mappen expertlibraries kan du ringa din DLL-metod genom att lägga till följande till toppen av din MQ4-fil: sträng ExecuteScalar (sträng strSQL) Det är du Du är redo att börja göra datasamtal direkt från Metatrader. Jag använder det här just nu för att leka med några SELECTINSERT-satser i min SQL Server och försöker leka med lite avancerad orderlogik. Mitt nästa mål: Använda Sockets från Metatrader för att kommunicera med en extern applikation, helst skrivet i C. Jag lyckades följa dina steg med Visual Studio 2008 men när jag sammanställde koden fick jag följande fel: 1 ------ Bygg igång : Projekt: Expertprov, Konfiguration: Debug Win32 ------ 1d: studioexpertsampleexpertsampleexpertsamplesrc. cpp (221). varning C4996: strcat: Den här funktionen eller variabeln kan vara osäker. Överväg att använda strcats istället. För att avaktivera avskrivning, använd CRTSECURENOWARNINGS. Se onlinehjälp för detaljer. 1 c: Program FilesMicrosoft Visual Studio 9.0vcincludestring. h (79). se förklaring av strcat 1d: studioexpertsampleexpertsampleexpertsamplesrc. cpp (235). fel C2065: MYCONNECTIONSTRING. odeklarerad identifierare 1d: studioexpertsexampleexpertsampleexpertsamplesrc. cpp (287). varning C4172: returadress för lokal variabel eller tillfällig 1Build logg sparades i filen: d: StudioExpertSampleExpertSampleDebugBuildLog. htm 1ExpertSample - 1 fel (er), 2 varningar Bygg: 0 lyckades, 1 misslyckades, 0 uppdaterad, 0 hoppas över Det verkar som om det inte känner igen MYCONNECTIONSTRING. Jag har sammanställt den ursprungliga ExpertSample. cpp innan du lägger till dina uppdateringar och det fungerade bara bra att generera DLL. Kan du snälla hjälpa till. Tack på förhand, Hur man skapar Forex tick historisk databas i gratis MYSQL för Windows, Linux eller Apple Mac OSX Hur man skapar Forex tick historisk databas i gratis MYSQL för Windows, Linux eller Apple Mac OSX Jag har framgångsrikt byggt en historisk tick databas för valutakurser. Den innehåller nästan 300 miljoner poster av millisekunder fästingar. Jag har gjort allt detta använder MYSQL eftersom det enkelt kan portas över till Linux från Windows om jag behöver. Oracle är för dyrt eftersom MYSQL är gratis. Microsoft SQL Server är också ganska snabb men bygger endast på Windows. Jag ser emellertid lite fördröjning med Windows, så jag måste komma ihåg det här problemet för eventuellt framtida genomförande. Denna databas innehåller också 14 stora valutapar också för tickhistoriken också. Forex tick dataperioden är från våren 2009 till hösten 2011. Jag har också laddat min forex data från kommaseparerade värde (CSV) filer. Jag har skapat ett C-program för att ladda databasen till MYSQL. Slutligen har jag skapat en SQL-fil från MYSQLDUMP som gör det möjligt att skapa din databas och tabell, och sedan fylla i tabellen med forex tick data. Jag kommer snart att lägga in alla dessa resurser i ett medlemskapsöverföringsområde som du måste bli medlem om du vill ha tillgång till dessa resurser. Gå med här när jag meddelar att resurserna är redo för nedladdning. OBS! Jag lägger nu in mina TRADING ALERTS i min personliga FACEBOOK ACCOUNT och TWITTER. Oroa dig inte eftersom jag inte lägger upp dumma kattvideor eller vad jag äter Dela det här:

No comments:

Post a Comment