Software to download Intraday and End of Day Stock data, FOREX data and more, from the free Internet sources. Generally, the program can be configured to download any data that are available online through the HTTP protocol.

Visibility is very important for this site. If you like it please link to this URL.

Please read the disclaimer

Home


Software:
Cortex Neural Networks
Indicators pack
Stock Downloader


FOREX Tutorials



Chart patterns
Options basics

Indicators pack:
   Accum / Distrib line
   Aroon
   ATR
   Bollinger Bands
   CCI
   CLV
   MACD
   Momentum
   Point and Figure
   PPO
   PVO
   RSI
   StochRSI
   Stochastic Oscillator
   Ultimate Oscillator
   Williams %R


Contents


Introduction

About program

Stock Downloader is script-based package, that can be run from the Cortex program. It contains three independent scripts: two for downloading the day end data, and one for intraday quotes.

Both stock quotes and Forex quotes can be obtained.

In addition to downloading quotes from the Internet, scripts can create price charts.

To obtain the day-end quotes, you need to simply run a program once. To get intraday quotes in near-real time, you need to run the program periodically, say, once per minute. The Cortex program can do it, by running the script that you specified, by the timer.

In this tutorial, we will walk through the Stock Downloader's code, step by step.

We assume, that you are already familiar with the Cortex's built-in scripting language

About Internet data sources

We can not guarantee, that the Internet sources, for which the Stock Downloader is currently configured, will be available in future, as we do not controm these sources. However, the script uses simple rules, that can be overwritten by the user, to download the data from almost any data source, that is available by HTTP protocol.

Therefore, the Internet data sources, that the scripts are currently configured to obtain the data from, should only be considered as an example (though they worked reliably for last three years by the moment of this writing).

Intraday stock quotes obtained from the yahoo historical stock quote server are 15 minutes delayed.
Day end quotes at Yahoo server can be updated (by Yahoo) with a delay, so you may want to download them few hours after the market closes, if you want to make sure you have last day's data.

Beginners and Advanced Users

Changing the settings of the Stock Downloader requires some minimal familiarity with the Cortex's built-in scripting language. For example, to edit the list of stocks, the program downloads quotes for, from, say, msft and genz to yhoo and ibm, you need to edit the following code:


arrStockNames[0] = "msft";
arrStockNames[1] = "genz";

and to replace it with


arrStockNames[0] = "yhoo";
arrStockNames[1] = "ibm";

To change the Internet data source may require more advanced coding, but it still is not very difficult.

You will be able to add/remove symbols you want to download data for, to specify the start date / end date for the day end quotes, and start time / end time for the intraday quotes. Then you click "run" and wait. The rest of work is done for you automatically.

As the Cortex's built-in scripting language has powerfull charting and data representation tools, advanced users will be able to edit the scripts to create HTML or XML tables with stock and/or forex quotes, to calculate and plot indicators and so on.

Advanced Users

As was already mentioned, the program can download and parse any or almost any file, available through the HTTP protocol. It comes with the preconfigured "beginner's" settings, that allow to retrieve stock quotes from the Yahoo, as this is probably the most reliable and easy to use service.

Using the program's built-in language, you can download and parse pages from other sources, for example, you can extract some specific indexes or even the data that have little to do with the stock market, like the up-to-date price of a Barby doll. Then you can incorporate this information into your data files and use whatever analysing software you want.

You also have an access to math, graphics and much more. For example, you can download 1 minute quotes, and draw the price chart, as new data become available.

You can also perform some additional tasks, like data import-export, data transformations and so on.


DAY_END.TSC

Use this file to download day end stock and Forex quotes. Unlike the DAY_END_CHART.TSC, this file does not produce the chart.

As was mentioned above, the Internet data sources we use should be considered as examples only, the end user can alter the code to download data from other sources.

DAY_END.TSC, part 1

void main()
{
    // First of all, clean the output window
    OUT_CLEANUP();

    // Arrays containing names of stock and Forex symbols
    array_s arrForexNames = CREATE_ARRAY_S(	0);
    array_s arrStockNames = CREATE_ARRAY_S(	0);

    // Add symbols you want to download to these lists
    arrForexNames[0] = "eurusd";
    arrStockNames[0] = "msft";
    ...	

Here, we have created lists of strings, to hold names of stock and Forex symbols. The actual symbols we used are just examples, to download other symbols, you will have to edit this code.

DAY_END.TSC, part 2

    // Connect string for FOREX, use <symbol>, for 'usdchf',
    //    <sym_1> and <sym_2> for 'usd' and 'chf', 
	//    <start day>, <end day> <start month>,
	//    <end month>, <start year>, <end year>

    string strConnectForex = 
		"http://www.chartflow.com/ozforex/historybasic.asp?
			period=exact&ccy1=<sym_1>&ccy2=<sym_2>
			&datefrom=<date_from>&dateto=<date_to>";

    // Connect string for stocks, use <symbol>, 
	//    <start day>, <end day>
    //    <start month>, <end month>, 
	//    <start year>, <end year>
    string strConnectStocks = 
		"http://table.finance.yahoo.com/table.csv?
			s=<symbol<&d=<end month<&e=<end day<
			&f=<end year<&g=d&a=<start month<
			&b=<start day<&c=<start year<&ignore=.csv";

    // Start and end dates for stock downloader
    string strStartDay="01"; 
    string strStartMonth="01"; 
    string strStartYear="2000";

    string strEndDay="10"; 
    string strEndMonth="04"; 
    string strEndYear="2004";

    string strStockPath = 
        "c:\\s_projects\\CortexPro\\data\\stock_dl\\stocks\\";
    string strForexPath = 
        "c:\\s_projects\\CortexPro\\data\\stock_dl\\forex\\";
    ...	

To download files from the Internet, we need to know their URL. As Internet data sources usually use CGI, the URL contains parameters, specifying the start and end date, stock / forex symbol and so on. Instead of these parameters, we provide a placeholder, within angle brackets. Later, we will create code, that will replace these placeholders with symbol(s) we need.

Also note, that we use Yahoo stock server for stock quotes and ChartFlow server for Forex quotes. There are two reasons: first, Yahoo does not provide Forex data, second, ChartFlow (unlike Yahoo) does not provide text files, only HTML. It gives us a good chance to examine the code that removes HTML decorations, retrieving data in form of a text table.

In addition to connect strings, we need to specify start and end dates.

DAY_END.TSC, part 3

    PRINT("%s\r\n", "Opening Internet session...");
    double bResult = OPEN_HTTP_SESSION();

    if(bResult == 0)
    {
        PRINT("%s\r\n", "failed");
        return;
    }

    DownloadSymbols("stock", arrStockNames, strConnectStocks, 
        strStartDay, strStartMonth, 
        strStartYear, strEndDay, strEndMonth, strEndYear, "");

    DownloadSymbols("forex", arrForexNames, strConnectForex, 
        strStartDay, strStartMonth, strStartYear, strEndDay, 
        strEndMonth, strEndYear, 
        "Date        Price\r\n			");

    CLOSE_HTTP_SESSION();
}
    ...	

We open HTTP session, to do it, we have to be connected to the Internet.

Then we call the DownloadSymbols function (see below) twice, once for stocks and then for Forex. Each time we pass corresponding array with names of symbols, connect string etc.

DAY_END.TSC, part 4

void DownloadSymbols(string strType, array_s arrNames, 
    string strConnect, string strStartDay, 
    string strStartMonth, string strStartYear, 
    string strEndDay, string strEndMonth, 
    string strEndYear, string strHeader)
{
    PRINT("Downloading %s information: ", strType);

    double bIsStock = 0;
    if(STR_CMP(strType, "stock") == 0)
    {
        bIsStock = 1;
    }

    for(double i = 0; i < ARRAY_SIZE(arrNames); i = i + 1)
    {
        PRINT("%s... ", arrNames[i]);

        if(bIsStock == 1)
        {
            STR_REPLACE(strConnect, "", arrNames[i]);
            STR_REPLACE(strConnect, "", strStartDay);
            STR_REPLACE(strConnect, "", strStartMonth);
            STR_REPLACE(strConnect, "", strStartYear);
            STR_REPLACE(strConnect, "", strEndDay);
            STR_REPLACE(strConnect, "", strEndMonth);
            STR_REPLACE(strConnect, "", strEndYear);
        }
        else
        {
            string strSymbol1 = SUBSTRING(arrNames[i], 0, 3);
            string strSymbol2 = SUBSTRING(arrNames[i], 3, 6);

            STR_REPLACE(strConnect, "", strSymbol1);
            STR_REPLACE(strConnect, "", strSymbol2);
            STR_REPLACE(strConnect, "", strStartYear 
                + "-" + strStartMonth + "-" + strStartDay);
            STR_REPLACE(strConnect, "", strEndYear 
                + "-" + strEndMonth + "-" + strEndDay);
        }

        string strFile = GET_HTTP(strConnect, bResult);

        if(bResult = 0)
        {
            PRINT("failed (%s)\r\n", strConnect);
            continue i;
        }

        PRINT("%s\r\n", "done");
    ...	

In the code above, we replace the placeholders with values for particular symbols, resulting string can be understood by the data source server.

Then we call GET_HTTP, that downloads the Internet page, and stores it in a string.

DAY_END.TSC, part 5

        string strFileName;
        if(bIsStock == 1)
        {
            strFileName = strStockPath + arrNames[i] + ".stk";
        }
        else
        {
            strFileName = strForexPath + arrNames[i] + ".for";
        }

        double hFile = F_OPEN(strFileName, "wb");
	
        if(STR_LEN(strHeader) > 0)
        {
            F_PRINT(hFile, "%s\r\n", strHeader);
        }

        if(bIsStock == 1)
        {
            F_PRINT(hFile, "%s", strFile);
        }
        else
        {
            // Forex file is not in text format, so we 
            // need to remove HTML from it
            string strTmp = STR_STR(strFile, "Query", 1);
            strFile = STR_STR(strTmp, "<td width=\"50%\" 
                align=\"center\" bgcolor=\"#FFFFFF\">", 1);
            strTmp = STR_STR(strFile, "</table>", 0);

            STR_REPLACE(strTmp, "\t", "");
            STR_REPLACE(strTmp, "\r", "");
            STR_REPLACE(strTmp, "\n", "");
            STR_REPLACE(strTmp, "<tr>", "\r\n");
            STR_REPLACE(strTmp, "</tr>", "");
            STR_REPLACE(strTmp, "</td>", "\t");
            STR_REPLACE(strTmp, "<td width=\"50%\" 
                align=\"center\" bgcolor=\"#FFFFFF\">", "");
            STR_REPLACE(strTmp, "<td width=\"50%\" 
                align=\"center\" bgcolor=\"#E1EDF7\">", "");
            STR_REPLACE(strTmp, "/", ".");

            strFile = STR_STR(strTmp, "<td align=", 0);
			
            F_PRINT(hFile, "%s", strFile);	
        }
        F_CLOSE(hFile);
    }
}

After the Internet page is downloaded, we need to save in on disk. In case of stocks, we save file with .STK extention, in case of Forex - with .FOR

Also, we don't have to do anything with the contents of stock quotes file, as Yahoo can return text files (CSV). The Forex file, on the other hand, contains HTML table, with some irrelevant text before it (header) and after it (footer).

To take a look at the original file, comment all the replacements, so that the file is saved on disk as it is.

First, we need to find the beginning of the data. The file contains a string, saying "Results of your query", and as we can easily find out by performing the search in any text editor, it occures only once. So we search for the word "Query":
string strTmp = STR_STR(strFile, "Query", 1);

In addition to HTML table tags, the file contains some extra tabs and curriage return - line feed characters. We remove them, because we want to have full control over the tabulations and new lines:
STR_REPLACE(strTmp, "\t", "");
STR_REPLACE(strTmp, "\r", "");
STR_REPLACE(strTmp, "\n", "");

We want to have a new line where <tr> used to be, tab, where </td> used to be, all the other table decorations should be removed (replaced with empty strings).
STR_REPLACE(strTmp, "<tr>", "\r\n");
STR_REPLACE(strTmp, "</tr>", "");
STR_REPLACE(strTmp, "</td>", "\t");
STR_REPLACE(strTmp, "<td width=\"50%\"
    align=\"center\" bgcolor=\"#FFFFFF\">", "");
STR_REPLACE(strTmp, "<td width=\"50%\"
    align=\"center\" bgcolor=\"#E1EDF7\">", "");

Then, we need to replace "/" with ".". as SLANG does not understand DD/MM/YYYY date format, but it understands DD.MM.YYYY:
STR_REPLACE(strTmp, "/", ".");

Finally, after all changes, we have one last decoration left, at the end of the file:
strFile = STR_STR(strTmp, "<td align=", 0);


DAY_END_CHART.TSC

Essentially, it is the same file as the one we just studied. The only difference is that we are creating XML file with charts, one image per symbol, and display it, after the download is complete.

To learn XML, visit the Free online XML tutorial.

In two words, the idea of XML-XSL pair of files working together is that XML contains data only, while XSL provides the format (how to display these data). You can use XML files that come with Stock Downloader, or you can create your own. The script file we are about to examine creates XML file, containing names of images (charts) and some additional information, it uses XSL files that come with Stock Downloader.

Essentially, the code is very similar to the DAY_END.TSC, so we will only focus on signifficant differences.

DAY_END_CHART.TSC, part A

	CLOSE_HTTP_SESSION();

	PRINT("%s\r\n", "Creating charts...");

	string strPath = "c:\\S_Projects\\CortexPro\\data\\stock_dl\\";

	string strXml = Chart("<stocks>", arrStockNames);
	strXml = strXml + Chart("<forex>", arrForexNames);

	SAVE_XML(strPath + "images\\", "chart_dayend", "chart_dayend", 
		"root", strXml);
	SHOW_XML(strPath + "images\\chart_dayend.xml");

We call the Chart() function (see below) twice, for an array of stock names, and for an array of Forex names. The function returns XML string, that we pass to SAVE_XML. The SAVE_XML adds the header to the XML string, and saves it to the file. Finally, we call SHOW_XML, to display the result.

DAY_END_CHART.TSC, part B

string Chart(string strType, array_s arrNames)
{
	double bIsStock = 0;
	string strClose = "</forex>";
	string strDataSubDir = "forex\\";
	if(STR_CMP(strType, "<stocks>") == 0)
	{
		bIsStock = 1;
		strClose = "</stocks>";
		strDataSubDir = "stocks\\";
	}

	string strXML = strType;

	string strSymbolName;
	string strImagePath;
	string strDataPath;
	double bIsPathRelative = 0;

	array arrDate = CREATE_ARRAY(0);
	array arrClose = CREATE_ARRAY(0);

We are going to save data to the "stocks" and "forex" subdirectories, correspondingly. The code above assigns the variables with the names of these directories.

Also, we create arrays for date and price information. For this particular script, we plot Close price, but of course, you can edit the code to plot something else.

DAY_END_CHART.TSC, part C


	for(double i = 0; i < ARRAY_SIZE(arrNames); i = i + 1)
	{
		PRINT("\t%s... ", arrNames[i]);

		strSymbolName = arrNames[i];

		strImagePath = strPath + "images\\" + arrNames[i] 
			+ ".png";	

		strXML = strXML + "<symbol>";
		strXML = strXML + "<symbol>";
		strXML = strXML + strSymbolName;
		strXML = strXML + "</symbol>";

		strDataPath = strPath + strDataSubDir + arrNames[i];
	
		if(bIsStock == 1)
		{
			TABLE_LOADER(strDataPath + ".stk", 
				bIsPathRelative, 1, "", 1, 
				"", 0, arrDate, 6, arrClose);
		}
		else
		{
			TABLE_LOADER(strDataPath + ".for", 
				bIsPathRelative, 1, "", 1, 
				"", 0, arrDate, 1, arrClose);
		}

		strXML = strXML + SAVE_CHART(400, 200, 1, 
			strImagePath, arrDate, arrClose);

		strXML = strXML + "</symbol>";
		strXML = strXML + strClose;
	}
	return strXML;
}

Here, two important things are happening. First, for each symbol, we build the name of the file, by adding together the directory, symbol name and the extention. Then we download a previously saved file from the disk.

Second, we build the XML string, adding code, that will be responsible for displaying this particular symbol's data.


INTRADAY.TSC

This script is different from the two above, because it is supposed to be run by the timer. The timer works through two different functions (instead of "main") "init" and "timer".

Init is called the first time the script run, timer - every other time.

Note, that in our script there is a "main" function as well. It is not mandatory, but by adding it, we allow the user to run the script "by hand".

Also note, that the script uses some important assumptions about your time zone. Make sure, the numbers are correct, so that the program begin and end downloading in synch with the market.

In the code below, we are going to walk through the code, step by step.

INTRADAY.TSC, part 1

void main()
{
	init();
}

Just to allow the script to be run "by hand", we have created this function. All it does, is calling the "init" function.

INTRADAY.TSC, part 2

void init()
{
    // List of stocks
    array_s arrStockNames = CREATE_ARRAY_S(0);
    arrStockNames[0] = "msft";
    arrStockNames[1] = "genz";

    // List of Forex symbols
    array_s arrForexNames = CREATE_ARRAY_S(0);
    arrForexNames[0] = "eurusd";
    arrForexNames[1] = "eurchf";

    // Connect string for stocks, 
    // use <symbol> for a stock name
    string strConnectStocks = 
        "http://finance.yahoo.com/d/quotes.csv?
            s=<symbol>&f=d1t1ohgl1v&e=.csv";

    // Connect string for Forex, 
    // use <symbol> for a currency name
    string strConnectForex = 
        "http://finance.yahoo.com/d/quotes.csv?
            s=<symbol>=X&f=d1t1ba&e=.csv";

    // Start and end time for stock downloader
    double nStartHour=9; 
    double nStartMinute=45; 
    double nEndHour=16; 
    double nEndMinute=15;

    // Time difference between local time and stock market
    double nTimeDifference = -1;

First of all, we are creating two lists, one for stocks and one for Forex symbols. The user is supposed to customize these lists.

Then, we need connection strings. This script is using Yahoo stock server, as one of the most reliable and friendly. However, you can use some other data sources, if you choose to.

The start and end times are for stock market only, as Forex is opened 24/5. These times are what Yahoo uses.

The time difference is the difference between your time zone and Yahoo. If according to your clock, the Yahoo data begin changing in 8.45, and on Yahoo site it says 9.45, then the time difference is "-1".

INTRADAY.TSC, part 3

    double nTimerCounter = 0;

    string strDataPath = 
        "c:\\s_projects\\CortexPro\\data\\stock_dl\\";
    string strStockPath = 
        "c:\\s_projects\\CortexPro\\data\\stock_dl\\stocks_intra\\";
    string strForexPath = 
        "c:\\s_projects\\CortexPro\\data\\stock_dl\\forex_intra\\";

    string strSymbolName;
    string strFullStockPath;
    double hFile;

    double hStocksWrapper = WRAP_CREATE();
    double hForexWrapper = WRAP_CREATE();

The nTimerCounter variable is for your convenience only.

We assign 3 variables, one for data directory, one for the subdirectory, containing stock intraday prices, and one - for Forex prices.

Finally, we create two "wrappers" (see the SLANG reference), one for arrays we use to keep stock data, and one - for Forex.

INTRADAY.TSC, part 4

for(double i = 0; i < ARRAY_SIZE(arrStockNames); i = i + 1)
{
    strSymbolName = arrStockNames[i];

    array arrDate = CREATE_ARRAY(0);
    array arrTime = CREATE_ARRAY(0);
    array arrClose = CREATE_ARRAY(0);

    strFullStockPath = strStockPath + strSymbolName + ".stk";

    hFile = F_OPEN(strFullStockPath, "r");
    if(hFile != -1)
    {
        F_CLOSE(hFile);
        TABLE_LOADER(strFullStockPath, 0, 0, "", 
            1, "", 0, arrTime, 1, arrDate, 7, arrClose);
    }

    WRAP_ADD(hStocksWrapper, arrTime);		// 0
    WRAP_ADD(hStocksWrapper, arrDate);		// 1
    WRAP_ADD(hStocksWrapper, arrClose);		// 2
}

The cycle handles the stock data, the one for Forex is right below it.

First, we create 3 arrays, for date (day, month, year), time (hour, minute) and price. The date and time arrays are numeric, we use SLANG functions (see SLANG reference, SCRIPT_MATH.DLL functions) to convert dates to numbers and back.

Then we try to open the data file, that is supposed to be on disk (it is not there the very first time we run a program), and if it is there, we close it, and call TABLE_LOADER to download the data.

Finally, we create copies of these arrays and keep them in the hStocksWrapper. This way, we can go through many cycles, using the same names for arrays.

INTRADAY.TSC, part 5

    for(i = 0; i < ARRAY_SIZE(arrForexNames); i = i + 1)
    {
        strSymbolName = arrForexNames[i];

        array arrDate = CREATE_ARRAY(0);
        array arrTime = CREATE_ARRAY(0);
        array arrClose = CREATE_ARRAY(0);

        strFullStockPath = strForexPath + strSymbolName + ".for";

        hFile = F_OPEN(strFullStockPath, "r");
        if(hFile != -1)
        {
            F_CLOSE(hFile);
            TABLE_LOADER(strFullStockPath, 0, 0, "", 
                1, "", 0, arrTime, 1, arrDate, 5, arrClose);
        }

        WRAP_ADD(hForexWrapper, arrTime);		// 0
        WRAP_ADD(hForexWrapper, arrDate);		// 1
        WRAP_ADD(hForexWrapper, arrClose);		// 2
    }

    timer();
}

The logic is the same, as for the stocks, described above.

The last line calls timer(). Note, that the first time you run the script by the timer, init() will be called, and NOT timer(). If you want the timer() to be called the first time, call it explicitely from init().

INTRADAY.TSC, part 6

void timer()
{
    OUT_CLEANUP();
    PRINT("%.0f\r\n", nTimerCounter);

    double bResult = 1;
    string strXmlBody = "";

    array arrDateInfo = TIME(nTimeDifference);
    double nDayOfWeek = arrDateInfo[0];	
    double nYear = arrDateInfo[1];
    double nMonth = arrDateInfo[2];		
    double nDay = arrDateInfo[3];
    double nHour = arrDateInfo[4];		
    double nMinute = arrDateInfo[5];
    double nSecond = arrDateInfo[6];

    if(nDayOfWeek == 1 || nDayOfWeek == 7) 
    {
        PRINT("%s\r\n", "The market is closed during the Weekend");
    }
    else
    {
        PRINT("%s\r\n", "Opening Internet session...");
        bResult = OPEN_HTTP_SESSION();

        if(bResult == 0)
        {
            PRINT("%s\r\n", "failed");
            return;
        }
    }

The timer, depending on the day and time, may open the Internet session to download the new data, or to refuse, because the market is closed.

INTRADAY.TSC, part 7

    string strStartTime = NUM2STR(nStartHour, "%02.0f") + ":" 
        + NUM2STR(nStartMinute, "%02.0f");
    string strEndTime = NUM2STR(nEndHour, "%02.0f") + ":" 
        + NUM2STR(nEndMinute, "%02.0f");

    double nStartTime = TIME_TO_REAL(strStartTime);
    double nEndTime = TIME_TO_REAL(strEndTime);

    string strTime = NUM2STR(nHour, "%02.0f") + 
        ":" + NUM2STR(nMinute, "%02.0f");
    double nTime = TIME_TO_REAL(strTime);

    string strXmlSymbols = "";
    string strDataExchangeFileName;

Data transformations to the form we need. Also, we set strXmlSymbols to an empty string. Later, we will add parts to it.

INTRADAY.TSC, part 8

    if(nStartTime <= nTime && nEndTime >= nTime)
    {
        strXmlBody = strXmlBody + "<stocks>";

        DownloadSymbols("stocks_intra", arrStockNames, 
            strConnectStocks, 
            "Request,Date,Time,Open,High,Low,Close,Volume", 
            "data_stocks", ".stk");
        strXmlBody = strXmlBody + strXmlSymbols;
        strXmlBody = strXmlBody + "</stocks>\r\n\r\n";
    }
    else
    {
        PRINT("%s\r\n", "Stock market closed for a day");
    }

    strXmlBody = strXmlBody + "<forex>";
	
    DownloadSymbols("forex_intra", arrForexNames, strConnectForex, 
        "Request,Date,Last,Bid,Ask", "data_forex", ".for");
    strXmlBody = strXmlBody + strXmlSymbols;
    strXmlBody = strXmlBody + "</forex>";

    PRINT("%s\r\n\r\n", "Cycle completed");
    CLOSE_HTTP_SESSION();

    string strXmlPath = 
        "c:\\s_projects\\CortexPro\\data\\stock_dl\\images\\";
    SAVE_XML(strXmlPath, "intraday", "intraday", 
        "root", strXmlBody);
    SHOW_XML(strXmlPath + "intraday.xml");

    // --------------------

    nTimerCounter = nTimerCounter + 1;
}

If the time is between 9.45 and 16.00, we download the stock information, then we download the Forex information. After it is done, we display the result (XML).

INTRADAY.TSC, part 9

void DownloadSymbols(string strType, array_s arrNames, 
    string strConnectSymbol, string strHeader, 
    string strDataExchangeFileName, string strExtention)
{
    double bIsStock = 0;
    if(STR_CMP(strType, "stocks_intra") == 0)
    {
        bIsStock = 1;
    }

    strXmlSymbols = "";

    PRINT("Downloading %s information\r\n", strType);

    string strExchangeFileName = 
        strDataPath + strDataExchangeFileName + ".tmp";
    double hDataExchangeFile = 
        F_OPEN(strExchangeFileName, "w+b");

    string strConnect;
    string strFile;
    string strFoundString;
    string strRequestTime;
    string strRequestDate;
    string strSymbolFileName;
    double bWriteHeader;
    double hFile;

In addition to declaring variables that we will use later, this block of code contains an important bit that works with the .TMP file. Every time the timer() is called, the .TMP file will be rewritten, it contains the last date-time-open-high-low-close-volume. The idea is to provide the user with a simple way of working with the Stock Downloader from the outside program. An example may be your own program, that is checking the date and time, when the .TMP file was modified, and if it changes, downloads the new stock / Forex quotes. The code that works with the .TMP file can be removed, Stock Downloader does not use it anywhere else.

INTRADAY.TSC, part 10

    for(double i = 0; i < ARRAY_SIZE(arrNames); i = i + 1)
    {
        PRINT("%s...", arrNames[i]);

        strConnect = strConnectSymbol;
        STR_REPLACE(strConnect, "<symbol>", arrNames[i]);
        strFile = GET_HTTP(strConnect, bResult);

        strFoundString = STR_STR(strFile, "Proxy Error", 1);
        if(STR_LEN(strFoundString) != 0)
        {
            PRINT("Unable to download file %s\r\n", strConnect);
            continue i;
        }

        if(bResult == 0)
        {
            PRINT("Unable to download file %s\r\n", strConnect);
            continue i;
        }

        arrDateInfo = TIME(nTimeDifference);
        nDayOfWeek = arrDateInfo[0];		
        nYear = arrDateInfo[1];
        nMonth = arrDateInfo[2];			
        nDay = arrDateInfo[3];
		nHour = arrDateInfo[4];
        nMinute = arrDateInfo[5];
        nSecond = arrDateInfo[6];

        strRequestTime = NUM2STR(nHour, "%02.0f") + 
            ":" + NUM2STR(nMinute, "%02.0f");
		strRequestDate = NUM2STR(nMonth, "%02.0f") + 
            "/" + NUM2STR(nDay, "%02.0f")
            + "/" + NUM2STR(nYear, "%-4.0f");
		
        PRINT("%s\r\n", "done");

For all stocks or Forex symbols, we download a new quotes info from the Internet.

INTRADAY.TSC, part 11

        STR_REPLACE(strFile, "\"", "");
	
        strSymbolFileName = strDataPath + strType + 
            "\\" + arrNames[i] + strExtention;

        bWriteHeader = 1;
        hFile = F_OPEN(strSymbolFileName, "r");
        if(hFile != -1)
        {
            F_CLOSE(hFile);
            bWriteHeader = 0;
        }

        hFile = F_OPEN(strSymbolFileName, "a+b");
	
        if(bWriteHeader == 1)
        {
            F_PRINT(hFile, "%s\r\n", strHeader);
        }

        F_PRINT(hFile, "%s", strRequestTime, ",%s", 
            strRequestDate, ",%s", strFile);
	
        F_CLOSE(hFile);

        // This file can be used for data exchange between 
        // StockDownloader and other applications
        F_PRINT(hDataExchangeFile, "%s", arrNames[i], 
            ",%02.0f", nHour, ":%02.0f", nMinute, 
            ",%02.0f", nMonth, "/%02.0f", nDay, "/%4.0f", 
            nYear, ",%s", strFile);

        strXmlSymbols = strXmlSymbols + AssignArrays(arrNames[i], 
            strFile, strRequestTime, strRequestDate, bIsStock, i);
    }

    F_CLOSE(hDataExchangeFile);	
}

The dates in the Yahoo file are quoted, so we need to replace the quotes with empty strings. If the file is being created (it was not there before), then we need to write header string, otherwise, it is already there.

The XML string is returned from the AssignArrays function, and added to the existing XML string, this way we get all stock and Forex XML strings together.

INTRADAY.TSC, part 12

string AssignArrays(string strSymbolName, string strFile, 
    string strRequestTime, string strRequestDate, 
    double bIsStock, double nSymbolNum)
{
    string strXML = "";
    string strDate;
    string strLast;
    string strOpen;
    string strHigh;
    string strLow;
    string strPrice;
    string strVolume;
    string strBid;
    string strPrice;
    double hWrapper;

    if(bIsStock == 1)
    {
        hWrapper = hStocksWrapper;	

        // Date,Time,Open,High,Low,Close,Volume
        // "3/29/2001","1:31PM",89.25,95.49,89.18,94.68,2160600
        strDate = GET_TOKEN(strFile, ",");
        strLast = GET_TOKEN(strFile, ",");
        strOpen = GET_TOKEN(strFile, ",");
        strHigh = GET_TOKEN(strFile, ",");
        strLow = GET_TOKEN(strFile, ",");
        strPrice = GET_TOKEN(strFile, ",");
        strVolume = GET_TOKEN(strFile, ",");

        strXML = strXML + "<symbol>\r\n";

        strXML = strXML + "\t<symbol>\r\n";
        strXML = strXML + "\t\t" + strSymbolName + "\r\n";
        strXML = strXML + "\t</symbol>\r\n";

        strXML = strXML + "\t<request>\r\n";
        strXML = strXML + "\t\t" + strRequestTime + "\r\n";
        strXML = strXML + "\t</request>\r\n";

        strXML = strXML + "\t<request_date>\r\n";
        strXML = strXML + "\t\t" + strRequestDate + "\r\n";
        strXML = strXML + "\t</request_date>\r\n";

        strXML = strXML + "\t<date>\r\n";
        strXML = strXML + "\t\t" + strDate + "\r\n";
        strXML = strXML + "\t</date>\r\n";

        strXML = strXML + "\t<last>\r\n";
        strXML = strXML + "\t\t" + strLast + "\r\n";
        strXML = strXML + "\t</last>\r\n";

        strXML = strXML + "\t<open>\r\n";
        strXML = strXML + "\t\t" + strOpen + "\r\n";
        strXML = strXML + "\t</open>\r\n";
		
        strXML = strXML + "\t<high>\r\n";
        strXML = strXML + "\t\t" + strHigh + "\r\n";
        strXML = strXML + "\t</high>\r\n";
		
        strXML = strXML + "\t<low>\r\n";
        strXML = strXML + "\t\t" + strLow + "\r\n";
        strXML = strXML + "\t</low>\r\n";
		
        strXML = strXML + "\t<close>\r\n";
        strXML = strXML + "\t\t" + strPrice + "\r\n";
        strXML = strXML + "\t</close>\r\n";
		
        strXML = strXML + "\t<volume>\r\n";
        strXML = strXML + "\t\t" + strVolume + "\r\n";
        strXML = strXML + "\t</volume>\r\n";
    }		
    else
    {
        hWrapper = hForexWrapper;

        // Date,Last,Bid,Ask
        // 20:35,10/7/2003,12:09pm,1.3139,1.3147
        strDate = GET_TOKEN(strFile, ",");
        strLast = GET_TOKEN(strFile, ",");
        strBid = GET_TOKEN(strFile, ",");
        strPrice = GET_TOKEN(strFile, ",");

        strXML = strXML + "<symbol>\r\n";

        strXML = strXML + "\t<symbol>\r\n";
        strXML = strXML + "\t\t" + strSymbolName + "\r\n";
        strXML = strXML + "\t</symbol>\r\n";

        strXML = strXML + "\t<request>\r\n";
        strXML = strXML + "\t\t" + strRequestTime + "\r\n";
        strXML = strXML + "\t</request>\r\n";

        strXML = strXML + "\t<request_date>\r\n";
        strXML = strXML + "\t\t" + strRequestDate + "\r\n";
        strXML = strXML + "\t</request_date>\r\n";

        strXML = strXML + "\t<date>\r\n";
        strXML = strXML + "\t\t" + strDate + "\r\n";
        strXML = strXML + "\t</date>\r\n";

        strXML = strXML + "\t<last>\r\n";
        strXML = strXML + "\t\t" + strLast + "\r\n";
        strXML = strXML + "\t</last>\r\n";

        strXML = strXML + "\t<bid>\r\n";
        strXML = strXML + "\t\t" + strBid + "\r\n";
        strXML = strXML + "\t</bid>\r\n";

        strXML = strXML + "\t<ask>\r\n";
        strXML = strXML + "\t\t" + strPrice + "\r\n";
        strXML = strXML + "\t</ask>\r\n";
    }

First, we parse the data, that we have downloaded, using the GET_TOKEN function. Then we build the XML string, that will hold the information about the symbol we are currently processing.

INTRADAY.TSC, part 13

    WRAP_GET(hWrapper, arrTime, nSymbolNum * 3); 
    WRAP_GET(hWrapper, arrDate, nSymbolNum * 3 + 1);
    WRAP_GET(hWrapper, arrClose, nSymbolNum * 3 + 2);

    arrDate[ARRAY_SIZE(arrDate)] = DATE_TO_REAL(strRequestDate);
    arrTime[ARRAY_SIZE(arrTime)] = TIME_TO_REAL(strRequestTime);
    arrClose[ARRAY_SIZE(arrClose)] = STR2NUM(strPrice);

    string strImagePath = strDataPath + "images\\";

    double nMinutesInTheDay;
    if(STR_CMP(strType, "forex_intra") == 0)
    {
        nMinutesInTheDay = 1439;	// around a clock		
        nStartTime = 0;
    }
    else
    {
        // 9:46 - 16:00
        nMinutesInTheDay = nEndHour * 60 + nEndMinute - 
            nStartHour * 60 - nStartMinute;	
        nStartTime = nStartHour * 60 + nStartMinute;
    }

    strXML = strXML + SAVE_CHART_INTRADAY(400, 200, 
        strImagePath + strSymbolName + ".png", 
        ARRAY_SIZE(arrDate), nMinutesInTheDay, 
        nStartTime, arrDate, arrTime, arrClose);

    strXML = strXML + "</symbol>\r\n";

    return strXML;
}

The WRAP_GET is used to access arrays we have previously stored in the wrapper. Note, that for each symbol, we have stored 3 arrays (time, date, close), so we use i, i + 1 and i + 2 to reference them.

Then we add new data at the end of an array, and create a PNG image for a chart (and return a corresponding XML string).


Continue to Cortex order page.
Continue to Cortex home page.


Free Stock trading Course

The course consists of five E.mails and covers all essentials of Technical Analysis approach to Stock Trading. Compare to $$$ that you will have to pay elsewhere. All you need to do is to enter your name (nickname will do) and E.mail address in the form below.

Name: E-Mail:

Please, provide us with some feedback!
It is a matter of life and death for us, but will only take 20 seconds for you.
No personal info collected. Proceed...
NLP, Hypnosis, Power, Manipulation Tai Chi, Chi Gun Neural Networks
Stock and FOREX trading: full cycle, steps-by-step.
Habits Management Karate tutorial

Back Pain Relief System Calendar Creator
Building a small profitable site Joints Gymnastics Another Flow Charts Designer
Profitable web site in 9 days
Flow charts for Presentations and Web

Shareware Directory
Touch Typing: how fast can you learn it? Web programming : Perl, XML Stock and FOREX Trading

Keywords:

review software stock trading
The Stock Downloader program allows you to automatically download free live stock quote files from the yahoo historical stock quote server.
Both historical intraday stock data and yahoo historical stock quote files can be downloaded.

day trading e book
A free e.mail trading course containing 5 e.mails with stock day trading tip information is available from this site. In this e.mails, the basics of computer system trading is covered.
The links in the left column can be used as a day trading tutorial, containing multiple day trading how to stock day trading tips for the technical investment analysis.

atr breakout
This article covers the Advanced True Range indicator. It includes the basic information, formulas and an example case study.

investing quote stock
This site offers tutorials for both day profit trading and day end trading.
Software available for downloading includes stock downloader for historical intraday data and yahoo historical stock quote files with day end quotes.

archive quote stock
The yahoo historical stock quote archives can be downloaded from the Internet automatically using the Stock Downloader software.

current quote stock yahoo
Yahoo server provides stock market quote historical data, available for downloading from the Internet as CSV (comma separated) files. These files are updated daily, after the markets close.
Yahoo server also provides 15 minutes delayed intraday quotes that can be downloaded by the Stock Downloader as they appear online.

commodity market system trading
The tutorials available from this site can be used for online day trading education.
The Trader trading simulator can produce trading signals based on the indicators. You can use indicators, that come with the program, or create your own using Trader's built-in scripting language.

stock trend chart
The Trader trading simulator is an example of chart pattern recognition software - it can detect price trends, plot them and use them to generate trading signals.

stock day trading tip
The trading course, available as five e.mails contains trading tips and well-known (but mostly ignored) common sence trading rules.

sp 500 trading system
To create your own indicators, for example, as part of sp 500 trading system, use Trader's built-in scripting language.

The language resembles the Basic, and gives you the access to many functions, such as convergence divergence test, chart pattern recognition, point figure charting and much more.

historical market quote stock
Use the Stock Downloader to download both intraday and day end stock quotes from the Yahoo stock server.
The program provides you with high degree of flexibility, it is designed in such way, that you can leave it unattended for extended periods of time (months).

history market quote stock
Historical quotes available from the yahoo historical stock quote server are adjusted for splits.
The split files are available together with the stock quotes. However, downloading them is a much more difficult task.
The Stock Downloader will take care of it for you.

free system trading
Use the Stock Downloader together with the Trader program, to download free stock quotes and produce trading signals.
On this site you will find tutorials about stock trading, that will help you to buils your own trading systems.

day profit trading
The day trading uses the last moment information, and decisions have to be made FAST. That's why we use computers to make automatic decisions.
To do a successfull day living trading, you will need to practice on some kind of sample data first. This data can be obtained using the Stock Downloader program.
Note, that the quotes on Yahoo server are 15 minutes delayed.

day living trading
Can the day trading be profitable for you, and not just for your broker?
Read our trading course to learn the common sence tips and tricks.

convergence divergence test
When two lines come closer, it is called convergence. When they go in the opposite directions (one up, one down) - it is a divergence.
The thing is - the convergence / divergence test usually works faster than the convergence divergence indicator itself, providing predictive signals.

historical intraday stock data
When you use the Stock Downloader to get the intraday data, you will be connected to the Yahoo server. The 15 minutes delayed data are extracted from the Yahoo pages, together with the split information, if any.

definition ppo
This article covers the Percenmtage Price Oscillator indicator. It includes the basic information, formulas and an example case study.

formula macd
MACD stands for the Moving Average Convergence Divergence.
As you can guess from the title, the moving averages are calculated for the stock price, and the points of their intersections are used as trading signals.

screen stochastic
Stochastic indicators are trying to determine the buying and selling pressure. If the security is under the pressure, then sooner or later the price will adjust.
Mostly, these are range indicators.

real time day trading signal
The stock quotes from the Yahoo stock server are 15 minutes delayed. You can take this fact into consideration whan creating your own trading system, or simply use the downloaded data to learn the technical investment analysis before doing "the real thing".

downloader stock
The Stock Downloader is a program that uses Yahoo stock server to download stock quotes.
It will also download split information.

chart pattern recognition software
The Trader day trading simulation program is an example of the chart pattern recognition software. It can find the beginning and end of the price trend, and to generate trading signals using the convergence and divergence of the trendlines.

wmt stock quote
One of the stocks used as an example in the Trader tutorials is the WMT.


free live stock quote

The Stock Downloader works as a front end for any software taht can use it's files. It creates the free live stock quote files on the disk, and as the new information becomes available, appends it to these files.


past stock quote
The Stock Downloader makes the past stock quote information available as it will download historical quote files from the Yahoo for you.
As there is no historical intraday data files at the yahoo finance stock quote server, the Stock Downloader queries Yahoo once a minute, saving the data to the historical file of its own.

computer system trading
There is a number of free educational files on this site, containing free information on creating the trading system using computer.

historical stock quote free
Historical stock quotes can be downloaded from the Yahoo using the Stock Downloader program. The downloading process is automated.

day trading simulation
The Trader day trading simulation program works with the indicators, providing you with the free charts, including point figure charting, trading signals and pattern analysis.

download historical quote
When we use the Stock Downloader to download historical quote files from the Yahoo site, we have to keep in mind, that this quotes are delayed. Normally, it is a 15 minutes delay for the intraday quotes, and up to few hours delay for the day end stocks (they update their data after the markets are closed, and it takes some time).

day trading pattern
Read the free online tutorials, available from our site, to learn about creating the indicators, using trading patterns.

stock index trading system
The index can be treated same way you treat the individual stock. You can buy it, sell it, download its quotes, and create the indicator, that takes full advantage of this particular index's behaviour.

yahoo finance stock quote
This service provides day end files, available for downloading. The Stock Downloader program can do it automatically for you.
Also, the intraday data can be extracted from some pages on the yahoo finance stock quote server. The Stock Downloader can do this for you, too.

simulator trading
The Trader day trading simulation program provides you with the power of technical analysis. It performs charting, applies the indicators to produce the trading signals, and even can analyze the chart patterns.
Also, you can use the predictive power of the neural networks, together with this program, as part of the custom indicators.

moving average trading system
The use of moving averages extends from the simple data smoothing, to the complex indicators, based on convergence, divergence and pattern analysis.
On one side, the moving average is always behind. On the other side, the derived indicators can sometimes "look forward", predicting the future values.

trading indicator
Indicators can be used to produce trading signals.

free intraday charts
Use the data, obtained using Stock Downloader program, to create free intraday charts

day trading simulator
We strongly advice, that you use some kind of the day trading simulator, before doing the "real thing", risking the real money.

intraday quotes
The Stock Downloader creates two files for each stock, one with the intraday quotes, and one with the split information.

technical analysis stock screen
Using the Trader's built-in scripting language, you can write your own stock screen. However, try the stock screens available online, first.

yahoo historical stock quote
This service provides day end files, available for downloading. The Stock Downloader program can do it automatically for you.
Also, the intraday data can be extracted from some pages on the yahoo finance stock quote server. The Stock Downloader can do this for you, too.

macd convergence divergence
This is one of the most commonly used trading indicators. It is simple, reasonably reliable and can be implemented using computers.

technical indicator macd
The difference between two moving averages is used to test for the buy and sell signals.

point figure charting
The "timeless" indicator, making possible to perform pattern analysis in a fast and elegant way.

technical analysis of stock trend
The Trader program has built-in functions for the trend analysis, particularly, it can check, if the trends for two lines (like MACD and price) go in the different directions.

day trading techniques
Read our free introductions on the trading techniques.

technical analysis formula
The technical analysis takes into consideration the past price history of the security.

day trading tutorial
Read our free introductions on the trading techniques.

day trading how to
Grab the stock quotes using the Stock Downloader program.

macd formula
MACD indicator can be used on stock price. However, it can also be applied to the other indicators, providing us with the information on the direction and speed of changes.

trading system
Usually, one indicator is not enough to build a complete trading system. You need at least momentum indicator, stochastic indicator and stop criteria.

historical intraday data
When downloading the historical intraday data, you may leave the Stock Downloader unattended for couple of months. It will keep the system clock correct, reboot, if you select this option, and reconnect to the Internet at the beginning of the trading session.

technical investment analysis
The technical investment analysis doe not care about company - all it uses is the stock price history.

online day trading education
Subscribe to our 5 e.mails trading course

day trading faq
Check them, before spending any money.

stock market quote historical
Historical quotes can be downloaded for you automatically with the Stock Downloader program.

trading course
Subscribe to our 5 e.mails trading course

historical daily stock quote
There are many online sources, offering historical daily stock quotes. You need, however, to be aware of possible problems with data, some providers offer, such as gaps, spikes etc.

free real time streaming stock quote
There are also providers, offering free real time streaming stock quotes. Usually it comes with the "free trial" of their software packages. Some of these sources are reliable and accurate enough.

day profit trading
Day trading is at the borderline between profit and risk. Some people say it is impossible to consistently win at such short time frame, while some other say - it is.

previous stock quote
You can not possibly trade based only on thecurrent stock price. You need to analyze the history, at least, the previous stock price. Quote history should be always at hand.

ppo software
There are some companies, offering it. We do not have enough experience in that area.

current quote stock yahoo
Yahoo is one of the most known public data providers. Both current stock quotes, and stock history is available on most securities.

archive quote stock
It has to be mentioned, that stock quote archives, available online, are often of very high quality. Sometimes you may see them offered for a fee, usually, it means minute time frame and large (> 600 mb) amount of data.

historical market quote stock
Both historical stock quotes and last minute market information should be studied, as any trading system may produce errors, and it is the last minute information, that allows us to catch them.

review software stock trading
Stock and Forex trading software does not necessarily have to be expansive. As many reviews suggest, the most convenient packages include "free time unlimited demo account", and free trading client as well. A good example is www.metaquotes.net - a company, that has one of the best FOREX trading platforms, which is completely free.

stock trend chart
Stock prices move in trends, which can be analyzed on charts. This is one of the cornerstones of technical analysis.

quick quote stock
The time delay is inacceptable, when you do intraday trading. There are many data providers, offering free or almost free stock quotes, without a delay.

day living trading
Can you live off the day trading? There are many examples, supporting this point of view, however, it seems that most of the day traders loose.

history market quote stock
There are many reviews available on the history of the stock market. Some of them are based on the Dow theory, some - on the waves, and so on.

sp 500 trading system
SP 500 is an index, and as such, it contains much less noise. It makes it a perfect trading instrument, and you can use all tools from the technical and fundamental analysis.

formula macd
MACD indicator is described in details, with formulas, Cortex scripting code and charts, on this site, in the corresponding article.

free system trading
There are many trading forums online, and almost all of them offer free trading systems. Some of them are half-tested, while some are market-ready.

stock day trading tip
The most important day trading tip is to learn as much as you can, before you risk your money, rather than start as soon as you can.

commodity market system trading
The trading - in any market, including commodity market - requires a system. It means you need to know in advance, what to do in any situation, so that you don't have to waste time, desiding.

definition ppo
See online sources.

best system trading
What trading system is the best? As trading is a balance between the risk and the reward, the best system is case-dependent. It is up to you to figure out your risk tolerance.

investing quote stock
Using stock quotes to trade as a mean of an investment is not a single approach, but rather many different approaches, involving different methods of analysis, and different paradigmas.

free software stock trading
It is our belief, that a trading platform must be free. Only this way, the trader can get used to it before he invests.

day trading tool
As an example of a day trading tool, consider a MetaTrader. Note: this site does not represent MT. We just like the tool.

free live stock quote
The situation with free live stock quotes is constantly changing to the best. To find the best available offer, do a research on the Internet trading forums.

free streaming stock quote
When you do a day end trading, you don't need a streaming data feed. However, it is required for intraday.

stochastic definition
On this site, you will find both the definition of stochastic indicator, and the source code to implement it.

simulator trading
There are some fine simulators available free of charge, one example is a MetaTrader. However, a real time trading is always different, and the difference is often to the worse.

wmt stock quote
See finance.yahoo.com

day trading simulation
As an example, consider MetaTrader simulator. It emulates intraday ticks, creating reasonably accurate testing environment.

day trading pattern
Patterns are widely used in day trading, as the matter of fact, as price charts are fractal, any time frame can benefit from this approach.

stock quote download
Stock quotes can be downloaded from Yahoo (one possible way to automate this task is to use a free script that comes with Cortex).

historical stock quote free
Yahoo is probably the first thing that comes to mind, unless you need something very specific.

download historical quote
To download, simply go to their site, enter the ticket and select the time frame.

stock index trading system
Indexes are similar to the stocks, exept two things. First, thei have much less "noise". Second, the liquidity is much better. So by all means, they are good instruments.

current own quote stock yahoo
Yahoo is a well known stock quotes provider, they are delayed, though.

yahoo finance stock quote
Also, day end information at Yahoo is delayed, too.

past stock quote
Historical (past) stock quotes are used for technical analysis.

day trading simulator
Simulators can be used to test day trading systems, however, nothing can replace a real time demo account.

free stock trading system
There are many stock trading systems in the Internet, available free of charge.

best stock trading system
The best stock trading system is the one that suits your risk - reward ideas.

stock trading simulator
There are many stock trading simulators available online, some of them are free.

yahoo stock quote
Yahoo stock quote is one of the well known and reliable free services.

historical stock quote
Historical stock quotes can be obtaines from many sources, from free Yahoo, to commercial Reuters.

trading indicator
There are many trading indicators, available on this site. It includes both the description, and the source code.

State of Power Tutorial

Hypnosis Tutorial

NLP Tutorial

Working with the Future Tutorial

Hypnotic Inductions

Working with Money

Working with Habits

Manipulation Tutorial


Karate online tutorial

Chi Gun online tutorial

Tai Chi 24 forms online tutorial

Tai Chi 40 forms online tutorial

Tai Chi 108 forms online tutorial

Tai Chi Chi Gun 18 forms online tutorial

Chi Gun (Dao In) Heart and Blood Vessels 8 forms online tutorial

Chi Gun (Dao In) Kidneys 8 forms online tutorial

Joints Gymnastics, Chi Gun warm-up online tutorial

Chi Gun tao of Dr. Shi online tutorial


Back Pain Relief System

Headache Relief Pressure Points Tutorial


Making a small profitable web site


Neural Networks for stock and FOREX trading

Thumbnails Generator

Calendar Creator

Learn Touch Typing


Flow Charts and decision trees for web sites and presentations

Another Flow Charts Designer

Stock trading - technical analysis