|
forums.silverfrost.com Welcome to the Silverfrost forums
|
View previous topic :: View next topic |
Author |
Message |
DanRRight
Joined: 10 Mar 2008 Posts: 2826 Location: South Pole, Antarctica
|
Posted: Thu Sep 24, 2009 11:21 pm Post subject: Connecting FTN95 to the server via TCP/IP socket |
|
|
There exist saying:"If you want to be successful investor, just save your money and wait for recessions". That means now is exactly such a time.
What i need from my Fortran colleagues is the following.
Can you guys help me to connect API of Ameritrade or Quote Tracker to FTN95?
Fortran is ideal for such applications as controlling your stocks and trading since it is easy to manipulate textual content because API exchanges data with online broker in plain ASCII text using or not XML.
Then there exist Clearwin+ which makes all things very easy and self-explanatory. You can write the program which gets stock quotes and analyses them and then informs you about any changes in stocks or indexes which is hard to control manually looking into broker trading software screen like Ameritrade Command Center, Scottrade Pro or Quote Tracker.
What i have done before was HTTP connection to internal Quote Tracker software HTTP server via open port with FTN95 READ_URL@ subroutine.
It works like charm: suppose you need to know what symbols are in your portfolio. You make a command in Fortran
call read_URL@(http://127.0.0.1:16240/req?EnumEquities(),FileSave,0,ier )
and get from Server list of your stocks saved in the FileSave file:
OK
MSFT,INTC,AMD,SVFT(Silverfrost ....
Or you need Citi bank stock prices from 13:00:00 to 13:01:00, you do
call read_URL@(http://127.0.0.1:16240/req?GetHistory(C,13:00:00,13:01:00,0.001,NO),FileSave,0,ier)
and get
OK
09/24/2009,13:00:04,4.86,4.86,4.86,4.86,0
09/24/2009,13:00:19,4.89,4.89,4.89,4.89,285637
09/24/2009,13:00:39,4.84,4.84,4.84,4.84,285637
.........
Really simple.
Unfortunately this easy way of communication with trading software is not allowing you to do everything else you can do. You can automate trading, get news, level I and II quotes etc using another method they recommend. Everything will be encrypted like you usually do if you do trading. For that you need to use Streaming API. Lot of people do that but no one using Fortran. The DLL, Help file and examples in Delphi, C++, C#, VB, Borland C++ Builder are available but i do not know these languages "intimately" and can not really pay for transferring that into Fortran.
They do basically what Clearwin can easily and much more effectively do too. The simplest code could be as small as 10 lines instead of their tens of thousands.
So my requests to anyone who interested are the following:
1) for communication with QuoteTracker: if you know any of these languages and know how to make TCP/IP socket connection and make them available to FTN95, can you create simplest example which is doing just one simple function their API allows like "Login" (connection to the socket) and request a quote from QT like in example above ?
2) for direct communication with Ameritrade: if you know how to use DLL or Activex, can you make it available to FTN95? Same simplest example how to do that is only needed
First one is more important since it does not depend of specific online brokerage, you can use it with any.
This as i said will require just a half a page of Clearwin text, making streaming socket to connect to Quote Tracker internal server (some standard procedure) and execute a single function from the first link below. Everything else then will be clear and done automatically. I am sure if we publish similar example on their site for comparison they will not believe their eyes how simple everything is in FTN95 Fortran
I can send you all the info and files. You can download QuoteTtracker, initial info and examples about communication with its streaming API from here
https://www.quotetracker.com/help/QTStreamingAPI.shtml
http://www.quotetracker.com/help/qtserver.shtml
By many reviews, Quote Tracker is one of the the greatest trading software which can be used literally with any online broker in the world with the best customer responds.
Last edited by DanRRight on Sat Oct 10, 2009 2:27 am; edited 1 time in total |
|
Back to top |
|
|
DanRRight
Joined: 10 Mar 2008 Posts: 2826 Location: South Pole, Antarctica
|
Posted: Mon Sep 28, 2009 1:03 pm Post subject: |
|
|
Here is an example of same look and feel code written in FTN95 for comparison with other language examples in link 1 above.
Compare these 100 lines of Fortran to 1000+ lines in C++. Isn't it amazing?This code is very close analogy of what is needed but unfortunately it is using HTTP communication method (link 2). If somebody will help to get TCP/IP socket connection done this is approximately how final code will look.
Part 1 is here, combine it with Part 2 Code: |
! 2009-09-27 Dan R.Right
! Compilation> ftn95 filename.f95 /free /link
! In QuoteTracker settings (Options/Edit Preferences/Misc)
! allow its API Server and HTTP port 16240
!
module all_defs
use clrwin
character (len=32) :: AppName, AppVer, AppAPIVer, Password, ReqTypeL1(4)
character (len=32) :: SymbolsForL1, SymbolHist, ReqTypeHist(2)
character (len=32) :: FromDateTimeHist, ToDateTimeHist, fileSave_URL
character ch_read_url*128, save64*64, tmp128*128
real*8 FreqHistQuote
integer IOlun, iTICK, iL1
CONTAINS
integer function cbGetHist()
if(iTICK.eq.0.or.iTICK.eq.2) write (save64,'(e10.3)') FreqHistQuote
if(iTICK.eq.1) write (save64,'(e10.3)') 0.001
ch_read_url='http://127.0.0.1:16240/req?GetHistory(DELL,9/02/2009,0,0.001,NO)'
ch_read_url(39:)=' '
ch_read_url=trim(ch_read_url)//trim(SymbolHist)//','//FromDateTimeHist(1:10)//&
&','//ToDateTimeHist(1:10)//','//save64(2:10)//',NO'
call READ_URL@(ch_read_url,fileSave_URL,0,ier)
if(ier.eq.1) goto 1
open(unit=21,file=fileSave_URL,STATUS='readonly', err=1)
do i=1,1000000
read( 21,'(a)',err=1,end=1) tmp128
write(ioLun,'(a)') tmp128
enddo
1 close (21,err=1)
cbGetHist=1
end function cbGetHist
integer function cbGetVer()
ch_read_url='http://127.0.0.1:16240/req?GetVersion()'
call READ_URL@(ch_read_url,fileSave_URL,0,ier)
if(ier.eq.1) goto 1
open(unit=21,file=fileSave_URL,STATUS='readonly', err=1)
do i=1,1000000
read( 21,'(a)',err=1,end=1) tmp128
write(ioLun,'(a)') tmp128
enddo
1 close (21,err=1)
cbGetVer=1
end function cbGetVer
integer function L1Quote()
ch_read_url='http://127.0.0.1:16240/req?GetLastQuote(stock,stock,stock...)'
ch_read_url(41:)=' '
ch_read_url(41:)=trim(ch_read_url)//SymbolsForL1//')'
call READ_URL@(ch_read_url,fileSave_URL,0,ier)
if(ier.eq.1) goto 1
open(unit=21,file=fileSave_URL,STATUS='readonly', err=1)
do i=1,1000000
read(21,'(a)',err=1,end=1) tmp128
write(ioLun,'(a)') tmp128
enddo
1 close (21,err=1)
L1Quote =1
end function L1Quote
integer function cbVoid()
cbVoid=1
end function cbVoid
end module all_defs |
Last edited by DanRRight on Mon Oct 05, 2009 4:44 am; edited 5 times in total |
|
Back to top |
|
|
DanRRight
Joined: 10 Mar 2008 Posts: 2826 Location: South Pole, Antarctica
|
Posted: Mon Sep 28, 2009 1:05 pm Post subject: |
|
|
Part 2
Code: |
!---------------------------------------------------------------------------------
program DEMO
use clrwin
use all_defs
AppName='DEMO'
ReqTypeL1(1)='SNAP';ReqTypeL1(2)='SUB'; ReqTypeL1(3)='UBSUB'; ReqTypeL1(4)='UBSUBALL'
ReqTypeHist(1)='TICK';ReqTypeHist(2)='OHLC'
SymbolHist='DELL'
SymbolsForL1='MA,V,LVS,KBH,^IXIC'
FreqHistQuote=1.
AppVer='1.0.0'
AppAPIVer='1.000'
Password=' '
iTICK=0; iL1=0
ioLun = 11
fileSave_URL= 'histQ'
FromDateTimeHist= '2009/09/22'
ToDateTimeHist = '2009/09/25'
i=winio@('%ww[no_border]%sy[3d_thin]%nr%nd&')
i=winio@('%ac[Esc]&','exit')
i=winio@('%sf%ts&',0.8d0)
i=winio@('%3.1ob&')
i=winio@(' AppName%ff%14rs%ff&',AppName)
i=winio@(' AppVer%ff%14rs%ff&',AppVer)
i=winio@(' AppAPIVer%ff%14rs%ff&',AppAPIver)
i=winio@(' Password%ff%14rs%ff %ff %ff&',password)
i=winio@(' %^tt[Login]%ff&',cbGetVer)
i=winio@(' %^tt[Clear]&',cbVoid)
i=winio@('%cb&')
i=winio@(' ReqType%ff%`15ls%ff&',ReqTypeL1,4,iL1)
i=winio@(' Symbol%ff%16.5re%ff %ff %ff %ff %ff %ff %ff&',SymbolsForL1)
i=winio@(' %^tt[LastQuote]%ff&',L1Quote)
i=winio@('%cb&')
i=winio@(' ReqType%ff%`15ls%ff&',ReqTypeHist,2,iTICK)
i=winio@(' Freq%ff%16rf%ff&',FreqHistQuote)
i=winio@(' Symbol%ff%15rs%ff&',SymbolHist)
i=winio@(' From%ff%15rs%ff&',FromDateTimeHist)
i=winio@(' To%ff%15rs%ff&',ToDateTimeHist)
i=winio@(' %^tt[GetHistory]%ff&',cbGetHist)
i=winio@('%cb%ff%nl&')
i=winio@('%50.16cw[hscroll,vscroll]',ioLun)
end
|
|
|
Back to top |
|
|
DanRRight
Joined: 10 Mar 2008 Posts: 2826 Location: South Pole, Antarctica
|
Posted: Fri Oct 09, 2009 11:51 pm Post subject: |
|
|
OK, i have additional info which may help those who know how to connect C++ code to Fortran, or better to Clearwin. I can't but for you that would be easy
If from the languages supplied in QuoteTracker website it is not clear which part of the text is responsible for making TCP/IP protocol connection here is another way: NETCAT for Windows.You can download it from the net, it has EXE and the source which is very small. Wikipedia has a link on Netcat 1.1.1 NT http://en.wikipedia.org/wiki/Netcat
I succeeded to do all needed functions via NETCAT but all is done manually. I type each command in DOS Prompt and get respond on screen from the Quotetracker. This should be done via Clearwin and Fortran text itself which will be doing that for you like in the code example above.
So to completely understand what is needed i describe the steps i am doing manually now.
1) i start netcat in dos prompt
nc -v 127.0.0.1 16240
and get respond from the Quotetracker server:
OK <CONNECT><SERVERVERSION>1.10</SERVERVERSION><SERVERTIME>10/08/2009 17:01:32<SERVERTIME><EASTERNTIME>10/08/2009 20:01:38</EASTERNTIME><CONNECT>
Now netcat is connected to the server.
2) You HAVE TO login first typing
<LOGIN>
<AppName>Widget Trader Pro</AppName>
<AppVer>1.0.0</AppVer>
</LOGIN>{FF}
and get OK in respond.
3) Then the same way you can get quotes from the server
<L1QUOTES>
<ReqType>SUB</ReqType>
<Symbols>DELL,IBM,MSFT</Symbols>
<Symbols>AA,INTC</Symbols>
</L1QUOTES>{FF}
{FF} is char=255, the end of the line before you hit return. You add it that via keyboard keeping ALT DOWN and TYPING 255 in numeric keypad
Done! Everything else is done same way
So, if anyone can take out the part of C++ code which connects code to TCP/IP then everything else is clear: the Clearwin will fill all requests just clicking one button like in example code above and get responds from server on its %cw screen (or/and in the file like in READ_URL@ or internally in some memory buffer. i do not know how TCP/IP protocol works, does it specify first before upload the size of needed buffer? And i do not know how to make this buffer available to Fortran)
C'mon C++ programmers, please help with that damn TCP/IP part ! It is done in all languages besides Fortran! Start expanding Fortran into the Web. Our future is inevitably on the net anyway. The next Clearwin called "ClearWeb" will be using network features, so that your code will be residing on some computer and you'll access it from your cell phone |
|
Back to top |
|
|
jjgermis
Joined: 21 Jun 2006 Posts: 404 Location: N�rnberg, Germany
|
Posted: Tue Nov 03, 2009 7:35 am Post subject: |
|
|
Hi DanRRight,
this seems like quite an interessting application. Unfortunately TCP/IP is beyond my knowledge In general I am often in the same situation: you need to do some simple job to make your program perfect. Then you arrive at a point where you can not get support for Fortran. Not long ago I tried the COM-interface. I can only start the it and then when it gets to the real stuff, I am stuck.
I always believe in examples. If only we can have a document with solely cool examples, it would make life much easier If I take a look at the FTN install directory there are some interessting examples - but without any docucmentation. I do not expect something that explains every line of code: a short description will do. If those examples are rather put on the web for download rather than in the install directory, users might have more of it.
Christmas is due shortly |
|
Back to top |
|
|
PaulLaidler Site Admin
Joined: 21 Feb 2005 Posts: 7933 Location: Salford, UK
|
Posted: Tue Nov 03, 2009 11:45 am Post subject: |
|
|
I do not have any relevant examples.
I am wondering if it may be possible to use the routines OPENCOMMDEVICE@ etc. together with a serial to IP converter.
Otherwise there could be a third party DLL that could be used for this purpose.
I have no experience in this area so I cannot give an further details. |
|
Back to top |
|
|
DanRRight
Joined: 10 Mar 2008 Posts: 2826 Location: South Pole, Antarctica
|
Posted: Mon Apr 05, 2021 11:03 pm Post subject: |
|
|
I found this post 12 years ago and was thinking that if i knew how to implement Websocket with this Fortran i'd (and you too) been already millionaire.
Because imagine this: you bought some stocks, they of course go up and down in price. When they go up you have gain, and when they go down YOU DO NOT LOSE (or lose very little). Because the autotrading mechanism will sell them ultrafast using stop loss order. And submit again when necessary. Orders nowadays are free, zero commissions
Intel Fortran has implemented Wininet which allows that. Can we these days make communication of Fortran program with the server via duplex Websocket port (to do login, send and receive commands) ?
Last edited by DanRRight on Tue Apr 06, 2021 12:43 pm; edited 1 time in total |
|
Back to top |
|
|
StamK
Joined: 12 Oct 2016 Posts: 159
|
Posted: Tue Apr 06, 2021 12:15 pm Post subject: |
|
|
I am sure there are many programs written in python or php for these (just google for github trading algorithms). The problem with stop loss order is that you have fees to pay all the time, so if the drops are more sudden than the increases such a simple algorithm will make you lose money (while if you had kept it without selling it would eventually have increased). Or at least that is what happens on highly volatile stocks (eg. cryptocurrencies!). |
|
Back to top |
|
|
John-Silver
Joined: 30 Jul 2013 Posts: 1520 Location: Aerospace Valley
|
Posted: Tue Apr 06, 2021 12:29 pm Post subject: |
|
|
Quote: | Or at least that is what happens on highly volatile stocks (eg. cryptocurrencies!). |
... until THE day cometh when they don't 'recover' (which is a dead certainty for anything as 'obscure' as cryptocurrencies !).... or you've just simply lost your acess pw !
(ref. relatively recent news articles about the bloke who couldn't (and still can't) remember his - one assumes because he can't find the scrap of paper on which he wrote it !!!!)
imo it's just another 'scam' of pyramid selling proportions or greater even
with SO many people already caught in the loop of anguish, and losses.
act of Life no. 1 : Everybody can't win.
(descends from soapbox) _________________ ''Computers (HAL and MARVIN excepted) are incredibly rigid. They question nothing. Especially input data.Human beings are incredibly trusting of computers and don't check input data. Together cocking up even the simplest calculation ... " |
|
Back to top |
|
|
DanRRight
Joined: 10 Mar 2008 Posts: 2826 Location: South Pole, Antarctica
|
Posted: Tue Apr 06, 2021 12:53 pm Post subject: |
|
|
StamK,
I know that. But I am ready to use any Fortran as a maximum, but no multilanguage programming. Otherwise in 2-3-5 years you find yourself with dead program. All these programs which have done things in this example above are long ago dead. My way to use TCP/IP port is still working. Now i need WebSocket duplex way of communications to be implemented in Fortran. Will try to ask folks in the Intel Fortran forum if here will be no progress. Start thinking about this early, people, all will do that 10 years from now and you will regret, because actually these things are simple and even primitive
Stocks commissions are free for most brokerages in USA since Oct 2019. And other frees are 4x smaller since this end of February.
Stop loss orders have their problems in highly volatile market of course. Analyzing my losses i find that in most cases the way of fast autotrading stop order way would work. For sure i will know when will try the program to run on test data.
But waiting for recovery is not an option i consider right.
Last edited by DanRRight on Tue Apr 06, 2021 12:59 pm; edited 1 time in total |
|
Back to top |
|
|
John-Silver
Joined: 30 Jul 2013 Posts: 1520 Location: Aerospace Valley
|
Posted: Tue Apr 06, 2021 12:59 pm Post subject: |
|
|
prediction: the 'other fees ' you refer to will increase x5 once the 'crisis is over !
... you heard it hear first !
Good Luck, but be careful of the stock 'monsters' out there ready to eat you alive. _________________ ''Computers (HAL and MARVIN excepted) are incredibly rigid. They question nothing. Especially input data.Human beings are incredibly trusting of computers and don't check input data. Together cocking up even the simplest calculation ... " |
|
Back to top |
|
|
DanRRight
Joined: 10 Mar 2008 Posts: 2826 Location: South Pole, Antarctica
|
Posted: Tue Apr 06, 2021 1:01 pm Post subject: |
|
|
No way John. These fees were rudiment of human trading as opposed to more and more prevalent frequent computerized autotrading. They were small anyway. And if you do not do 1000 trades per day they were just nothing, just couple dollars per 100k sold.
/* By the way QuoteTracker mensioned in this my old post now called Medved Trader. You may give it a try, as it is working with 100s stock brokers of many different countries. It has an API which allows autotrade via WebSocket port
If you missed 2001 recession, 2008-2009 recession and 2020 recession when stocks dropped 10 times and gained 10 times in no time then who are you? Aren't you reckless about money ? Unfortunately i am exactly such dumbo person .
And why i did not participate in this action ? Because i had no automatic mechanism to protect myself from market slides and due to that this game is called gambling and i do not gamble. Now we can make such protection possible. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|