Send opened positions from cAlgo to apache2 server via SSL - What is wrong ?
Send opened positions from cAlgo to apache2 server via SSL - What is wrong ?
24 Mar 2014, 13:03
Hi
I need send open positions to www server like apache2 via ssl connection but ...
why this robot does not show opened positions string in log window?
// ------------------------------------------------------------------------------- // // This is a Template used as a guideline to build your own Robot. // // ------------------------------------------------------------------------------- using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; using System.IO; using System.Net; using System.Text; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC)] public class NewRobot : Robot { private string openPositionsString = ""; protected override void OnStart() { // Put your initialization logic here } //================================================================================ // OnPositionOpened //================================================================================ protected override void OnPositionOpened(Position openedPosition) { int BuyPos = 0; int SellPos = 0; foreach (var position in Account.Positions) { // Count opened positions if (position.TradeType == TradeType.Buy) { BuyPos = BuyPos + 1; Print("POS VOLUME: " + position.Volume); // OPENED POSITION STRING openPositionsString = "START" + position.EntryTime + "," + position.Id + "," + position.SymbolCode + ",TRUE" + "," + position.Volume + "," + position.EntryPrice + "," + position.StopLoss + "," + position.TakeProfit + "," + position.Label + "," + position.Comment + ",ZZZEND"; Print("HOW TO SHOW IN LOGS ======================================================"); Print("String : " + openPositionsString); } if (position.TradeType == TradeType.Sell) { // OPENED POSITION STRING openPositionsString = "START" + position.EntryTime + "," + position.Id + "," + position.SymbolCode + ",FALSE" + "," + position.Volume + "," + position.EntryPrice + "," + position.StopLoss + "," + position.TakeProfit + "," + position.Label + "," + position.Comment + ",ZZZEND"; Print("HOW TO SHOW IN LOGS ======================================================"); Print("String : " + openPositionsString); SellPos = SellPos + 1; } } Print("All Buy positions: " + BuyPos); Print("All Sell positions: " + SellPos); } // end OnPositionOpened protected override void OnTick() { // Put your core logic here int BuyPos = 0; string sslServerHost = "breakermind.com"; int sslServerPort = 443; WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort + "/send.php?line=" + openPositionsString + "&user=ml@breakermind.com&pass=pass987"); request.Proxy = null; request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); Print("All Buy positions:" + responseFromServer); //Console.WriteLine(responseFromServer); //Print("All Buy positions: " + BuyPos); } protected override void OnStop() { // Put your deinitialization logic here } } /* public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } */ }
Thanks bye
Replies
breakermind
24 Mar 2014, 15:11
RE:
server side php file send.php save/update and delete opened positions into mysql database and then return recived positions line back
send.php
<?php include('functions.php'); // line example // START1395336294584,59923886,GBP/JPY,true,1.0,169.199,167.195,171.195,jf1nikmw1,null,ZZZ1395336294584,59923886,GBP/JPY,true,1.0,169.199,167.195,171.195,jf1nikmw1,null,ZZZEND //======================================================================================= connect mysql $mysqlcon = isConnect('localhost','root', 'toor'); //======================================================================================= get input strings $user_ip = $_SERVER['REMOTE_ADDR']; $user_time = time(); $user = md5($_GET['user']); $pass = md5($_GET['pass']); $line = htmlspecialchars($_GET['line'], ENT_QUOTES, 'UTF-8'); echo "<pre>"; echo $line; echo "</pre>"; $userID = 0; $out = ""; $positions[] = 0; //======================================================================================= if user and password correct $q = mysql_query("SELECT * FROM users WHERE user_email_hash='$user' AND user_pass='$pass'"); $userExist = mysql_num_rows($q); // user istnieje pobierz rekord z bazy (id usera) if($userExist != 0){ while ($row = mysql_fetch_assoc($q)){ //echo "user id: " . $userID = $row['user_id']; $userID = $row['user_id']; } } if($line == "STARTEND"){ $q5 = mysql_query("UPDATE positionsTest1 SET pos_close='$user_time' WHERE pos_close = 0 AND user_id =".$userID) or die( "#ERROR-1#" . mysql_error()); die($line); } //========================================================================================== preg_match for correct positions settings $isLineOK = preg_match("/^START([0-9]{1,99},[0-9]{1,99},[A-Z0-9\/]{1,10},[A-Z]{1,6},[0-9]{5,30},[0-9\.]{5,30},[0-9\.]{5,30},[0-9\.]{5,30},[a-zA-Z0-9]{1,100},[a-zA-Z0-9]{1,100},ZZZ)+END$/", $line); //======================================================================================== sprawdzenie danych wejściowych if(isPositionString($line) && isAllowedChar($line) && $userExist == 1 && $userID != 0 && $isLineOK == 1){ $cutline = isPositionStringCut($line); $posLines = explode('ZZZ', $cutline); $i = 0; foreach ($posLines as $line1){ $positions[$i] = explode(',', substr($line1, 0, -3)); $i++; } $positionsExists = ""; $z =0; foreach ($positions as $value) { $positionsExists = $positionsExists.$userID.$positions[$z][1].","; $positionsExists = $positionsExists."0"; //echo "==".$positionsExists."++"; $z++; } $j =0; foreach ($positions as $value) { $pos_id = $userID.$positions[$j][1]; $pos_currency = $positions[$j][2]; $pos_volume = $positions[$j][4]; $pos_stoploss = (float)$positions[$j][6]; $pos_takeprofit = (float)$positions[$j][7]; $pos_isLong = $positions[$j][3]; $pos_open = $positions[$j][0]; $pos_open_price = (float)$positions[$j][5]; $pos_label = $positions[$j][8]; $pos_comment = $positions[$j][9]; if($pos_volume = $positions[$j][4] <= 10000){ $pos_volume = 10000; } // INSERT INTO table (primarykeycol,col1,col2) VALUES (1,2,3) ON DUPLICATE KEY UPDATE col1=0, col2=col2+1 //$q2 = mysql_query("DELETE FROM positionsTest WHERE pos_id NOT IN ( $positionsExists)"); $q4 = mysql_query("UPDATE positionsTest1 SET pos_close='$user_time' WHERE pos_close = 0 AND user_id =".$userID." AND pos_id NOT IN (".$positionsExists.")") or die( "#ERROR-1#" . mysql_error()); //$q3 = mysql_query("UPDATE positionsTest SET pos_currency='$pos_currency',pos_volume='$pos_volume',pos_stoploss='$pos_stoploss',pos_takeprofit='$pos_takeprofit',pos_isLong='$pos_isLong',pos_open='$pos_open',pos_open_price='$pos_open_price',pos_label='$pos_label',pos_comment='$pos_comment', user_ip='$user_ip', user_time='$user_time' WHERE pos_id = '$pos_id'"); $q1 = mysql_query("INSERT INTO positionsTest1(pos_id,pos_currency,pos_volume,pos_stoploss,pos_takeprofit,pos_isLong,pos_open,pos_open_price,pos_label,pos_comment, user_id, user_ip, user_time) VALUES('$pos_id','$pos_currency','$pos_volume','$pos_stoploss','$pos_takeprofit','$pos_isLong','$pos_open','$pos_open_price','$pos_label','$pos_comment', '$userID', '$user_ip', '$user_time') ON DUPLICATE KEY UPDATE pos_currency='$pos_currency',pos_volume='$pos_volume',pos_stoploss='$pos_stoploss',pos_takeprofit='$pos_takeprofit',pos_isLong='$pos_isLong',pos_label='$pos_label',pos_comment='$pos_comment', user_ip='$user_ip', user_time='$user_time'") or die( "#ERROR-1#" . mysql_error()); $j++; } //echo microtime(); //$nanotime = system('date +%s%N'); //function microtime_float() //{ // list($usec, $sec) = explode(" ", microtime()); // return ((float)$usec + (float)$sec); //} //echo microtime_float(); if (!empty($_GET)) { //echo "<br>"; //echo $user."<br>"; //echo $pass."<br>"; //echo $line."<br>"; } $out = $line; }else{$out = '##SEND##CORRECT##DATA##';} mysql_close($mysqlcon); //========================================================================================= send output string //echo $out; echo $out; ?>
file functions.php
<?php function isConnect($host, $user, $password, $db = 'db'){ $link = mysql_connect($host, $user, $password) or die('Not connected : ' . mysql_error()); // make foo the current db $db_selected = mysql_select_db($db, $link) or die ('Can\'t use foo : ' . mysql_error()); mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); mysql_query("SET NAMES utf8"); mysql_query("SET CHARACTER SET utf8"); mysql_query("SET collation_connection = utf8_generali_ci"); return $link; } function isAllowedChar($line){ if (preg_match("#^[a-zA-Z0-9\.\,\/]+$#", $line)) { return 1;} else { return 0;} } function isPositionString($string){ // start end check if(substr($string, 0, 5) == "START" && substr($string, -3) == "END"){return 1;}else{return 0;} } function isPositionStringCut($string){ // start end check $string = substr($string, 5); $string = substr($string, 0, -6); return $string; } // clean input from $_GET $_POST USE: $_CLEAN['GET'] = cleanInput($_GET); function cleanInput($elem) { if(!is_array($elem)) $elem = htmlentities($elem, ENT_QUOTES,"UTF-8"); else{ foreach ($elem as $key => $value){ $elem[$key] = cleanInput($value); } } return $elem; } //$isLineOK = preg_match("/^START([0-9]{1,99}AAA[0-9]{1,99}AAA[A-Z0-9\/]{1,10}AAA[A-Z]{1,6}AAA[0-9]{5,30}AAA[0-9\.]{5,30}AAA[0-9\.]{5,30}AAA[0-9\.]{5,30}AAA[a-zA-Z0-9]{1,100}AAA[a-zA-Z0-9]{1,100}AAAZZZ)+END$/", $line); ?>
and mysql database file
## mysql database CREATE DATABASE db CHARACTER SET utf8 COLLATE utf8_general_ci; # CREATE DATABASE `db` CHARACTER SET utf8 COLLATE utf8_general_ci; # GRANT ALL ON `mydb`.* TO `username`@localhost IDENTIFIED BY 'password'; # FLUSH PRIVILEGES; # `user_time` TIMESTAMP DEFAULT NOW(), USE db; ## create table users CREATE TABLE `users` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `user_alias` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_email` varchar(200) CHARACTER SET utf8 collate utf8_general_ci , `user_email_hash` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_pass` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_ip` text CHARACTER SET utf8 collate utf8_general_ci, `user_time` int(21), `user_code` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_active` char(1) CHARACTER SET utf8 collate utf8_general_ci DEFAULT '0', PRIMARY KEY (`user_id`), UNIQUE (`user_email` , `user_alias`) )ENGINE=innoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE utf8_general_ci; insert into users VALUES('','zix','xx#email.com', md5('xx@email.com'), md5('pass'),null,null,null,0); ## create table users_all CREATE TABLE `users_all` ( `user_id` bigint(21) NOT NULL AUTO_INCREMENT, `user_alias` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_email` varchar(200) CHARACTER SET utf8 collate utf8_general_ci , `user_email_hash` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_pass` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_ip` text CHARACTER SET utf8 collate utf8_general_ci, `user_time` int(21), `user_code` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_active` char(1) CHARACTER SET utf8 collate utf8_general_ci DEFAULT '0', `user_firstname` char(2) CHARACTER SET utf8 collate utf8_general_ci , `user_lastname` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_country` char(2) CHARACTER SET utf8 collate utf8_general_ci , `user_town` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_gender` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_dofb` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_mobile` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_startbalance` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_descripion` text CHARACTER SET utf8 collate utf8_general_ci, `user_ip_mask` varchar(200) CHARACTER SET utf8 collate utf8_general_ci , PRIMARY KEY (`user_id`), UNIQUE (`user_email` , `user_alias`) )ENGINE=innoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE utf8_general_ci; CREATE TABLE `positionsTest1` ( `pos_id` varchar(200) CHARACTER SET utf8 collate utf8_general_ci , `pos_currency` varchar(25) CHARACTER SET utf8 collate utf8_general_ci , `pos_volume` bigint(21) DEFAULT 10000, `pos_stoploss` float, `pos_takeprofit` float, `pos_isLong` char(5) NOT NULL DEFAULT 0, `pos_open` bigint(21) NOT NULL DEFAULT 0, `pos_open_price` float, `pos_close` int(11) NOT NULL DEFAULT 0, `pos_close_price` float DEFAULT 0, `pos_label` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `pos_comment` varchar(100) CHARACTER SET utf8 collate utf8_general_ci , `user_id` bigint(21) DEFAULT 0, `user_ip` text CHARACTER SET utf8 collate utf8_general_ci, `user_time` text CHARACTER SET utf8 collate utf8_general_ci, `user_microtime` text CHARACTER SET utf8 collate utf8_general_ci, `user_nanotime` text CHARACTER SET utf8 collate utf8_general_ci, PRIMARY KEY (`pos_id`), UNIQUE (`pos_id`) )ENGINE=innoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
may be useful for someone ... bye.
@breakermind
breakermind
24 Mar 2014, 15:55
RE: RE:
version for JForex
http://www.dukascopy.com/swiss/english/forex/jforex/forum/viewtopic.php?f=65&t=50958
@breakermind
breakermind
25 Mar 2014, 13:28
RE: RE: RE:
Hi,
how to convert this price (position.EntryPrice)
1,777 ==> 1.777
ane how convert date (position.EntryTime)
2014-03-25 11:11:11 ===> seconds (133658232763)
Thanks
@breakermind
breakermind
25 Mar 2014, 17:36
RE: RE: RE: RE:
breakermind said:
Hi,
how to convert this price (position.EntryPrice)
1,777 ==> 1.777
ane how convert date (position.EntryTime)
2014-03-25 11:11:11 ===> seconds (133658232763)
Thanks
Does calgo has the ability to specify the time in milliseconds for position.EntryTime ?
if Yes how to do that ?
@breakermind
breakermind
26 Mar 2014, 13:35
RE: RE: RE: RE: RE:
Hi all,
Send positions to www server method $_POST
using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; using System.IO; using System.Net; using System.Text; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC)] public class NewRobot : Robot { private int zzz; private string openPositionsString = ""; protected override void OnStart() { //Positions.Opened += PositionsOnOpened; } /* private void PositionsOnOpened(PositionOpenedEventArgs args) { var position = args.Position; Print(position.Label != "---" ? "Position opened by LabelsSample cBot at {0}" : "Position opened manually at {0}", position.EntryPrice); } */ //================================================================================ // OnPositionOpened //================================================================================ protected override void OnTick() { var AllPositions = Positions.FindAll(""); openPositionsString = ""; int BuyPos = 0; int SellPos = 0; foreach (var position in AllPositions) { // Count opened positions if (position.TradeType == TradeType.Buy) { BuyPos = BuyPos + 1; Print("POS VOLUME: " + position.Volume); //position.EntryPrice = position.EntryPrice; int time = position.EntryTime.Year * 10000 + position.EntryTime.Month * 100 + position.EntryTime.Minute; // OPENED POSITION STRING openPositionsString += "START" + position.EntryTime + "," + position.Id + "," + position.SymbolCode + ",TRUE" + "," + position.Volume + "," + position.EntryPrice + "," + position.StopLoss + "," + position.TakeProfit + "," + position.Label + "," + position.Comment + ",ZZZEND"; Print("HOW TO SHOW IN LOGS ======================================================"); Print("String : {0}", openPositionsString); } if (position.TradeType == TradeType.Sell) { // OPENED POSITION STRING openPositionsString += "START" + position.EntryTime + "," + position.Id + "," + position.SymbolCode + ",FALSE" + "," + position.Volume + "," + position.EntryPrice + "," + position.StopLoss + "," + position.TakeProfit + "," + position.Label + "," + position.Comment + ",ZZZEND"; Print("HOW TO SHOW IN LOGS ======================================================"); Print("String : " + openPositionsString); SellPos = SellPos + 1; } } Print("All Buy positions: " + BuyPos); Print("All Sell positions: " + SellPos); string sslServerHost = "breakermind.com"; int sslServerPort = 443; WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort + "/s.php"); request.Proxy = null; request.Method = "POST"; request.Credentials = CredentialCache.DefaultCredentials; request.ContentType = "application/x-www-form-urlencoded"; byte[] postBytes = Encoding.ASCII.GetBytes("line=" + openPositionsString + "---" + zzz++); request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); Print("All Buy positions:" + responseFromServer); //Console.WriteLine(responseFromServer); //Print("All Buy positions: " + BuyPos); } protected override void OnStop() { // Put your deinitialization logic here } } /* public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } */ }
:]
@breakermind
breakermind
26 Mar 2014, 16:12
Robot with send position to www server
when new position opened robot send post request tto www server (Master for position copy):
// ---------------------------------------------------------------------------------- // Simple Robot with sent positions to www server via https connection method post // ---------------------------------------------------------------------------------- using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; using System.IO; using System.Net; using System.Text; //using System.Net.Security.Cryptography.X509Certyficates; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class NewRobot : Robot { private int zzz; private string responseFromServer = ""; private string openPositionsString = ""; [Parameter("Hostname", DefaultValue = "breakermind.com")] public string sslServerHost { get; set; } [Parameter("Port", DefaultValue = 443)] public int sslServerPort { get; set; } [Parameter("Username", DefaultValue = "user")] public string Username { get; set; } [Parameter("Password", DefaultValue = "pass")] public string Password { get; set; } [Parameter("Position label", DefaultValue = "Master Position Label")] public string MyLabel { get; set; } [Parameter("Position comment", DefaultValue = "Master Position Comment")] public string MyComment { get; set; } [Parameter("Volume", DefaultValue = 10000)] public int Volume { get; set; } [Parameter("Volume Max", DefaultValue = 100000)] public int VolumeMax { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 30)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 15)] public int TakeProfit { get; set; } [Parameter(DefaultValue = 5)] public int MaxPositions { get; set; } //================================================================================ // OnStart //================================================================================ protected override void OnStart() { Print("Master Robot start ... Trade Master"); // openPositionsString = ""; // responseFromServer = ""; } protected override void OnBar() { if (Positions.Count < MaxPositions) { if (Volume > VolumeMax) { Volume = VolumeMax; } ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, MyLabel, StopLoss, TakeProfit); ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, MyLabel, StopLoss, TakeProfit); } } //================================================================================ // Positions OnTick //================================================================================ protected override void OnTick() { // get all opened positions with label and put to openPositionsString var AllPositions = Positions.FindAll(MyLabel); openPositionsString = ""; foreach (var position in AllPositions) { // BUY positions if (position.TradeType == TradeType.Buy) { // OPENED POSITION STRING openPositionsString += position.EntryTime + "_" + position.Id + "_" + position.SymbolCode + "_TRUE" + "_" + position.Volume + "_" + position.EntryPrice + "_" + position.StopLoss + "_" + position.TakeProfit + "_" + position.Label + "_" + position.Comment + "_##"; } // SELL positions if (position.TradeType == TradeType.Sell) { // OPENED POSITION STRING openPositionsString += position.EntryTime + "_" + position.Id + "_" + position.SymbolCode + "_FALSE" + "_" + position.Volume + "_" + position.EntryPrice + "_" + position.StopLoss + "_" + position.TakeProfit + "_" + position.Label + "_" + position.Comment + "_##"; } } //================================================================================ // Send POST to HTTPS Server //================================================================================ if (responseFromServer == openPositionsString) { Print("Same strings ... wait for new Positions !"); } if (responseFromServer != openPositionsString) { Print("===================================================================================="); Print("request server =>> " + openPositionsString); // For test php file return back POST ?line= (password and username disabled) WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort + "/s.php"); // post data byte[] postBytes = Encoding.ASCII.GetBytes("line=" + openPositionsString); // settings request.Proxy = null; request.Method = "POST"; request.Credentials = CredentialCache.DefaultCredentials; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); responseFromServer = reader.ReadToEnd(); Print("response server <<= " + responseFromServer); } } //================================================================================ // OnStop //================================================================================ protected override void OnStop() { Print("Master Robot stop"); } } }
@breakermind
breakermind
27 Mar 2014, 12:06
RE: RE: RE: RE:
breakermind said:
Hi,
how to convert this price (position.EntryPrice)
1,777 ==> 1.777
ane how convert date (position.EntryTime)
2014-03-25 11:11:11 ===> seconds (133658232763)
Thanks
DataTime to unix timestamp
public static double DateTimeToUnixTimestamp(DateTime dateTime) { return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds; }
@breakermind
breakermind
27 Mar 2014, 12:43
cbot
// ---------------------------------------------------------------------------------- // Simple Robot with sent positions to www server via https connection method post // ---------------------------------------------------------------------------------- using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; using System.IO; using System.Net; using System.Text; using System.Runtime; //using System.Net.Security.Cryptography.X509Certyficates; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class NewRobot : Robot { private int zzz; private string responseFromServer = ""; private string openPositionsString = ""; [Parameter("Hostname", DefaultValue = "breakermind.com")] public string sslServerHost { get; set; } [Parameter("Port", DefaultValue = 443)] public int sslServerPort { get; set; } [Parameter("Username", DefaultValue = "user")] public string Username { get; set; } [Parameter("Password", DefaultValue = "pass")] public string Password { get; set; } [Parameter("Position label", DefaultValue = "Master Position Label")] public string MyLabel { get; set; } [Parameter("Position comment", DefaultValue = "Master Position Comment")] public string MyComment { get; set; } [Parameter("Volume", DefaultValue = 10000)] public int Volume { get; set; } [Parameter("Volume Max", DefaultValue = 100000)] public int VolumeMax { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 30)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 15)] public int TakeProfit { get; set; } [Parameter(DefaultValue = 5)] public int MaxPositions { get; set; } //================================================================================ // OnStart //================================================================================ protected override void OnStart() { Print("Master Robot start ... Trade Master"); } protected override void OnBar() { if (Positions.Count < MaxPositions) { if (Volume > VolumeMax) { Volume = VolumeMax; } ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, MyLabel, StopLoss, TakeProfit); ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, MyLabel, StopLoss, TakeProfit); } } //================================================================================ // Positions OnTick //================================================================================ // replace character public static String CharReplace(String source, String ch1, string ch2) { String result = source.Replace(ch1, ch2); return result; } /// datatime to timestamp public static double DateTimeToUnixTimestamp(DateTime dateTime) { return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds; } protected override void OnError(Error error) { Print("Error code: " + error.Code); } protected override void OnTick() { // get all opened positions with label and put to openPositionsString var AllPositions = Positions.FindAll(MyLabel); openPositionsString = ""; foreach (var position in AllPositions) { // BUY positions if (position.TradeType == TradeType.Buy) { // OPENED POSITION STRING openPositionsString += DateTimeToUnixTimestamp(position.EntryTime) + "_" + CharReplace("" + position.Id, "_", "*") + "_" + position.SymbolCode + "_TRUE" + "_" + position.Volume + "_" + CharReplace("" + position.EntryPrice, ",", ".") + "_" + CharReplace("" + position.StopLoss, ",", ".") + "_" + CharReplace("" + position.TakeProfit, ",", ".") + "_" + CharReplace("" + position.Label, "_", "*") + "_" + CharReplace("" + position.Comment, "_", "*") + "_##"; } // SELL positions if (position.TradeType == TradeType.Sell) { // OPENED POSITION STRING openPositionsString += DateTimeToUnixTimestamp(position.EntryTime) + "_" + CharReplace("" + position.Id, "_", "*") + "_" + position.SymbolCode + "_FALSE" + "_" + position.Volume + "_" + CharReplace("" + position.EntryPrice, ",", ".") + "_" + CharReplace("" + position.StopLoss, ",", ".") + "_" + CharReplace("" + position.TakeProfit, ",", ".") + "_" + CharReplace("" + position.Label, "_", "*") + "_" + CharReplace("" + position.Comment, "_", "*") + "_##"; } } //================================================================================ // Send POST to HTTPS Server //================================================================================ if (responseFromServer == openPositionsString) { Print("Same strings ... wait for new Positions !"); } if (responseFromServer != openPositionsString) { Print("===================================================================================="); Print("request server =>> " + openPositionsString); try { // For test php file return back POST ?line= (password and username disabled) WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort + "/s.php"); // post data byte[] postBytes = Encoding.ASCII.GetBytes("line=" + openPositionsString); // settings request.Proxy = null; request.Method = "POST"; //request.Credentials = CredentialCache.DefaultCredentials; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); responseFromServer = reader.ReadToEnd(); } catch (Exception e) { Print("Error: " + e); } Print("response server <<= " + responseFromServer); } } //================================================================================ // OnStop //================================================================================ protected override void OnStop() { Print("Master Robot stop"); } } }
@breakermind
breakermind
31 Mar 2014, 15:13
( Updated at: 21 Dec 2023, 09:20 )
How to split string
Hi,
I have code:
// ---------------------------------------------------------------------------------- // Simple Robot with sent positions to www server via https connection method post // ---------------------------------------------------------------------------------- using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; using System.IO; using System.Net; using System.Text; using System.Runtime; //using System.Net.Security.Cryptography.X509Certyficates; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class NewRobot : Robot { private int zzz; private string responseFromServer = ""; private string openPositionsString = ""; [Parameter("Hostname", DefaultValue = "breakermind.com")] public string sslServerHost { get; set; } [Parameter("Port", DefaultValue = 443)] public int sslServerPort { get; set; } [Parameter("Username", DefaultValue = "user")] public string Username { get; set; } [Parameter("Password", DefaultValue = "pass")] public string Password { get; set; } [Parameter("Volume", DefaultValue = 10000)] public int Volume { get; set; } [Parameter("Volume Max", DefaultValue = 100000)] public int VolumeMax { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 30)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 15)] public int TakeProfit { get; set; } [Parameter(DefaultValue = 5)] public int MaxPositions { get; set; } //================================================================================ // OnStart //================================================================================ protected override void OnStart() { Print("Slave Robot start ..."); responseFromServer = ""; } protected override void OnBar() { if (Positions.Count < MaxPositions) { if (Volume > VolumeMax) { Volume = VolumeMax; } } } //================================================================================ // Positions OnTick //================================================================================ // replace character public static String CharReplace(String source, String ch1, string ch2) { String result = source.Replace(ch1, ch2); return result; } /// datatime to timestamp public static double DateTimeToUnixTimestamp(DateTime dateTime) { return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds; } protected override void OnError(Error error) { Print("Error code: " + error.Code); } protected override void OnTick() { // get all opened positions with label and put to openPositionsString //var AllPositions = Positions.FindAll(MyLabel); /* openPositionsString = "START"; foreach (var position in AllPositions) { // BUY positions if (position.TradeType == TradeType.Buy) { // OPENED POSITION STRING openPositionsString += DateTimeToUnixTimestamp(position.EntryTime) + "_" + CharReplace("" + position.Id, "_", "*") + "_" + position.SymbolCode + "_TRUE" + "_" + position.Volume + "_" + CharReplace("" + position.EntryPrice, ",", ".") + "_" + CharReplace("" + position.StopLoss, ",", ".") + "_" + CharReplace("" + position.TakeProfit, ",", ".") + "_" + CharReplace("" + position.Label, "_", "*") + "_##"; } // SELL positions if (position.TradeType == TradeType.Sell) { // OPENED POSITION STRING openPositionsString += DateTimeToUnixTimestamp(position.EntryTime) + "_" + CharReplace("" + position.Id, "_", "*") + "_" + position.SymbolCode + "_FALSE" + "_" + position.Volume + "_" + CharReplace("" + position.EntryPrice, ",", ".") + "_" + CharReplace("" + position.StopLoss, ",", ".") + "_" + CharReplace("" + position.TakeProfit, ",", ".") + "_" + CharReplace("" + position.Label, "_", "*") + "_##"; } } */ openPositionsString = "Send Login credentials"; //================================================================================ // Send POST to HTTPS Server //================================================================================ if (responseFromServer != openPositionsString) { Print("===================================================================================="); Print("request server =>> " + openPositionsString); try { // For test php file return back POST ?line= (password and username disabled) WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort + "/get.php"); // post data byte[] postBytes = Encoding.ASCII.GetBytes("&user=" + Username + "&pass=" + Password); // settings request.Proxy = null; request.Method = "POST"; //request.Credentials = CredentialCache.DefaultCredentials; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); responseFromServer = reader.ReadToEnd(); } catch (Exception e) { Print("Error: " + e); } Print("response server <<= " + responseFromServer); } string inp = "" + responseFromServer; string[] posin = inp.Split("##"); foreach (string pos in posin) { Print(pos); } } //================================================================================ // OnStop //================================================================================ protected override void OnStop() { Print("Slave Robot stop"); } } }
and this code generate error:
string inp = "" + responseFromServer; string[] posin = inp.Split("##"); foreach (string pos in posin) { Print(pos); }
What is wrong?
Regards
@breakermind
breakermind
03 Apr 2014, 11:57
RE: How to split string
Hi,
how to get current price for all available currency?
@breakermind
Spotware
03 Apr 2014, 14:07
RE: RE: How to split string
breakermind said:
Hi,
how to get current price for all available currency?
You can get current price for specific symbol by the following code:
var symbol = MarketData.GetSymbol("EURUSD"); Print("ask: " + symbol.Ask); Print("bid: " + symbol.Bid);
There is no list of all available symbols in cAlgo.API. If you want to enumerate some specific symbols you will need to hardcode list of them.
@Spotware
breakermind
05 Apr 2014, 15:48
How catch last event
Hi and thanks
how to capture last-position-event (like modify stoploss or takeprofit, open position, close position) when position was opened not from robot but manualy from calgo?
thx
@breakermind
breakermind
05 Apr 2014, 22:12
RE: How catch last event
Hi,
How to retrieve the history of closed positions?
@breakermind
breakermind
08 Apr 2014, 14:43
How to get Trader Contest positions and copy to file and next load to calgo
Hi,
How we can copy Traders opend positions to www page :
http://www.dukascopy.com/swiss/english/forex/jforex/forum/viewtopic.php?f=65&t=51042
and then we can GET file from web page and load to calgo robots
Bye..
@breakermind
breakermind
09 Apr 2014, 13:13
Live cAlgo positions on the website
Hi,
Yes it works in the real world. Displaying opened positions from cAlgo on the web page :]
You can see :
Regards
@breakermind
AlexanderRC
11 Apr 2014, 15:15
RE: How catch last event
breakermind said:
Hi and thanks
how to capture last-position-event (like modify stoploss or takeprofit, open position, close position) when position was opened not from robot but manualy from calgo?
thx
You can vote for this feature.
@AlexanderRC
breakermind
24 Apr 2014, 14:32
Get open positions from www server https post
cAlgo client get open positions from www server ssl:
// ---------------------------------------------------------------------------------- // Simple Robot with get positions from www server via https connection method post // ---------------------------------------------------------------------------------- using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; using System.IO; using System.Net; using System.Text; using System.Runtime; using System.Security.Cryptography.X509Certificates; using System.Net; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class NewRobot : Robot { private string responseFromServer = ""; private string openPositionsString = ""; [Parameter("Hostname", DefaultValue = "ssl.breakermind.com")] public string sslServerHost { get; set; } [Parameter("Port", DefaultValue = 443)] public int sslServerPort { get; set; } [Parameter("Username", DefaultValue = "zix@breakermind.com")] public string Username { get; set; } [Parameter("Position label", DefaultValue = "")] public string MyLabel { get; set; } [Parameter("Position comment", DefaultValue = "")] public string MyComment { get; set; } [Parameter("Volume", MinValue = 10000)] public int Volume { get; set; } [Parameter("Volume Max", DefaultValue = 100000)] public int VolumeMax { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 30)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 15)] public int TakeProfit { get; set; } [Parameter(DefaultValue = 5)] public int MaxPositions { get; set; } //================================================================================ // OnStart //================================================================================ protected override void OnStart() { Print("Master Robot start ... Trade Master"); responseFromServer = ""; } protected override void OnBar() { } //================================================================================ // Positions OnTick //================================================================================ protected override void OnError(Error error) { Print("===================================================================================="); Print("Error code: " + error.Code); Print("===================================================================================="); } protected override void OnTick() { //================================================================================ // Send POST to HTTPS Server //================================================================================ try { // For test php file return back POST ?line= (password and username disabled) WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort + "/get.php"); // post data byte[] postBytes = Encoding.ASCII.GetBytes("user=" + Username); // settings request.Proxy = null; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); responseFromServer = reader.ReadToEnd(); openPositionsString = ""; } catch (Exception e) { Print("===================================================================================="); Print("Error: " + e); Print("===================================================================================="); } Print("===================================================================================="); Print("response server <<= " + responseFromServer); Print("===================================================================================="); } //================================================================================ // OnStop //================================================================================ protected override void OnStop() { Print("Master Robot stop"); } } }
test version (works)
@breakermind
breakermind
06 May 2014, 23:44
RE: Open positions from server file
// System using System; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Collections.Generic; // cAlgo using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class NewcBot : Robot { private string responseFromServer = ""; private string openPositionsString = ""; [Parameter("Alias", DefaultValue = "Zix")] public string Alias { get; set; } [Parameter("Username", DefaultValue = "")] public string Username { get; set; } [Parameter("Password", DefaultValue = "")] public string Password { get; set; } [Parameter("Volume", DefaultValue = 10000)] public int Volume { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 1000)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 1000)] public int TakeProfit { get; set; } List<string> PosOpenID = new List<string>(); List<string> PosCloseID = new List<string>(); List<string> PosServerID = new List<string>(); List<string> PosServerAll = new List<string>(); protected override void OnStart() { // Put your initialization logic here } protected override void OnBar() { // Put your initialization logic here } protected override void OnTick() { // Put your core logic here //sendPositions(Username, Password); // Initialize initializePositions(); getPositions(Username, Password); comparePositions(); } protected override void OnStop() { // Put your deinitialization logic here } //==================================================================================================================== // Compare Positions //==================================================================================================================== protected void comparePositions() { try { string inp = "" + responseFromServer; // cut [GO] and [OG] inp = inp.Substring(4); inp = inp.Substring(0, inp.Length - 6); // pociapać na pozycję lista string[] posin = inp.Split('|'); PosServerAll = new List<string>(posin); initializePositions(); Print("OPEN POS LIST ==============================="); // Loop through List with foreach foreach (string prime in PosOpenID) { Print("OPEN POS ID " + prime); } Print("CLOSE POS LIST ==============================="); // Loop through List with foreach foreach (string prime1 in PosCloseID) { Print("CLOSE POS ID " + prime1); } foreach (string pos in posin) { Print(pos); string[] p = pos.Split(';'); if (!PosOpenID.Contains(p[0]) && p[0] != "" && !PosCloseID.Contains(p[0])) { Symbol symbol = MarketData.GetSymbol(p[1]); if (p[2] == "BUY") { Print("BUY " + p[1]); double pips1 = Convert.ToDouble(p[4]) - Convert.ToDouble(p[5]); double sl1 = pips1 / symbol.PipSize; double pips2 = Convert.ToDouble(p[6]) - Convert.ToDouble(p[4]); double tp1 = pips2 / symbol.PipSize; ExecuteMarketOrder(TradeType.Buy, symbol, Convert.ToInt64(Convert.ToDecimal(p[3])), "", sl1, tp1, 1, p[0]); //ExecuteMarketOrder(TradeType.Buy, Symbol, Convert.ToInt64(Convert.ToDecimal(p[4])), "Slave", Convert.ToDouble(p[6]), Convert.ToDouble(p[7])); } if (p[2] == "SELL") { Print("SELL " + p[1]); double pips1 = Convert.ToDouble(p[5]) - Convert.ToDouble(p[4]); double sl = pips1 / symbol.PipSize; double pips2 = Convert.ToDouble(p[4]) - Convert.ToDouble(p[6]); double tp = pips2 / symbol.PipSize; ExecuteMarketOrder(TradeType.Sell, symbol, Convert.ToInt64(Convert.ToDecimal(p[3])), "", sl, tp, 1, p[0]); //ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, MyLabel, StopLoss, TakeProfit); } } initializePositions(); } } catch (Exception rrr) { Print(rrr); } } //==================================================================================================================== // Initialize Positions //==================================================================================================================== protected void initializePositions() { // open id PosOpenID.Clear(); var AllPositions = Positions.FindAll(""); foreach (var position in AllPositions) { if (position.Comment != "") { PosOpenID.Add(position.Comment); } } // colose id PosCloseID.Clear(); foreach (HistoricalTrade trade in History) { if (trade.Comment != "") { PosCloseID.Add(trade.Comment); } } // Loop through List with foreach //Print("OPEN POS ID COMMENT "); foreach (string prime in PosOpenID) { // Print(prime); } // Print("CLOSED POS ID COMMENT "); // Loop through List with foreach foreach (string prime in PosCloseID) { // Print(prime); } } //==================================================================================================================== // Send POST to HTTPS Server //==================================================================================================================== protected void getPositions(string Username, string Password) { // log file path string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string logPath = Path.Combine(desktopFolder, "MasterLog.db"); //================================================================================ // Send request //================================================================================ try { using (StreamWriter w = File.AppendText(logPath)) { // log request w.WriteLine("REQUEST: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + openPositionsString); w.Flush(); w.Close(); } WebRequest request = WebRequest.Create("https://breakermind.com:443/get.php"); Print("===================================================================================="); Print("ALIAS ==>> " + Alias); byte[] postBytes = Encoding.ASCII.GetBytes("line=" + Alias + "&user=" + Username + "&pass=" + Password); request.Proxy = null; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); responseFromServer = reader.ReadToEnd(); } catch (Exception e) { Print("===================================================================================="); Print("Post Error: " + e); Print("===================================================================================="); using (StreamWriter w = File.AppendText(logPath)) { // log response w.WriteLine("ERROR: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + e); w.Flush(); w.Close(); } } Print("===================================================================================="); Print("<<== " + responseFromServer); Print("===================================================================================="); using (StreamWriter w = File.AppendText(logPath)) { // log response w.WriteLine("RESPONSE: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + responseFromServer); w.Flush(); w.Close(); } } /// datatime to timestamp public static double DateTimeToUnixTimestamp(DateTime dateTime) { return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds; } // end //================================================================================================================ // End Send POST to HTTPS Server //================================================================================================================ } }
input string responseFromServer:
[GO]23193753;EURUSD;BUY;20000;1,39309;1,36309;1,39809;1399402014,754|23193934;EURUSD;SELL;30000;1,39298;1,42298;1,38798;1399403997,808|23193956;EURUSD;BUY;20000;1,39293;1,37293;1,40293;1399404362,9|23193969;EURUSD;SELL;20000;1,39289;1,41289;1,38289;1399404538,428|23193970;EURUSD;SELL;20000;1,3929;1,4129;1,3829;1399404562,645|23193974;EURUSD;BUY;20000;1,39297;1,37297;1,40297;1399404626,638|23193975;EURUSD;SELL;20000;1,39294;1,41294;1,38294;1399404627,626|[OG]
@breakermind
breakermind
06 May 2014, 23:57
Open positions from server file
breakermind said:
// System using System; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Collections.Generic; // cAlgo using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class NewcBot : Robot { private string responseFromServer = ""; private string openPositionsString = ""; [Parameter("Alias", DefaultValue = "Zix")] public string Alias { get; set; } [Parameter("Username", DefaultValue = "")] public string Username { get; set; } [Parameter("Password", DefaultValue = "")] public string Password { get; set; } [Parameter("Volume", DefaultValue = 10000)] public int Volume { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 1000)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 1000)] public int TakeProfit { get; set; } List PosOpenID = new List(); List PosCloseID = new List(); List PosServerID = new List(); List PosServerAll = new List(); protected override void OnStart() { // Put your initialization logic here } protected override void OnBar() { // Put your initialization logic here } protected override void OnTick() { // Put your core logic here //sendPositions(Username, Password); // Initialize initializePositions(); getPositions(Username, Password); comparePositions(); } protected override void OnStop() { // Put your deinitialization logic here } //==================================================================================================================== // Compare Positions //==================================================================================================================== protected void comparePositions() { try { string inp = "" + responseFromServer; // cut [GO] and [OG] inp = inp.Substring(4); inp = inp.Substring(0, inp.Length - 6); // pociapać na pozycję lista string[] posin = inp.Split('|'); PosServerAll = new List(posin); initializePositions(); Print("OPEN POS LIST ==============================="); // Loop through List with foreach foreach (string prime in PosOpenID) { Print("OPEN POS ID " + prime); } Print("CLOSE POS LIST ==============================="); // Loop through List with foreach foreach (string prime1 in PosCloseID) { Print("CLOSE POS ID " + prime1); } foreach (string pos in posin) { Print(pos); string[] p = pos.Split(';'); if (!PosOpenID.Contains(p[0]) && p[0] != "" && !PosCloseID.Contains(p[0])) { Symbol symbol = MarketData.GetSymbol(p[1]); if (p[2] == "BUY") { Print("BUY " + p[1]); double pips1 = Convert.ToDouble(p[4]) - Convert.ToDouble(p[5]); double sl1 = pips1 / symbol.PipSize; double pips2 = Convert.ToDouble(p[6]) - Convert.ToDouble(p[4]); double tp1 = pips2 / symbol.PipSize; ExecuteMarketOrder(TradeType.Buy, symbol, Convert.ToInt64(Convert.ToDecimal(p[3])), "", sl1, tp1, 1, p[0]); //ExecuteMarketOrder(TradeType.Buy, Symbol, Convert.ToInt64(Convert.ToDecimal(p[4])), "Slave", Convert.ToDouble(p[6]), Convert.ToDouble(p[7])); } if (p[2] == "SELL") { Print("SELL " + p[1]); double pips1 = Convert.ToDouble(p[5]) - Convert.ToDouble(p[4]); double sl = pips1 / symbol.PipSize; double pips2 = Convert.ToDouble(p[4]) - Convert.ToDouble(p[6]); double tp = pips2 / symbol.PipSize; ExecuteMarketOrder(TradeType.Sell, symbol, Convert.ToInt64(Convert.ToDecimal(p[3])), "", sl, tp, 1, p[0]); //ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, MyLabel, StopLoss, TakeProfit); } } initializePositions(); } } catch (Exception rrr) { Print(rrr); } } //==================================================================================================================== // Initialize Positions //==================================================================================================================== protected void initializePositions() { // open id PosOpenID.Clear(); var AllPositions = Positions.FindAll(""); foreach (var position in AllPositions) { if (position.Comment != "") { PosOpenID.Add(position.Comment); } } // colose id PosCloseID.Clear(); foreach (HistoricalTrade trade in History) { if (trade.Comment != "") { PosCloseID.Add(trade.Comment); } } // Loop through List with foreach //Print("OPEN POS ID COMMENT "); foreach (string prime in PosOpenID) { // Print(prime); } // Print("CLOSED POS ID COMMENT "); // Loop through List with foreach foreach (string prime in PosCloseID) { // Print(prime); } } //==================================================================================================================== // Send POST to HTTPS Server //==================================================================================================================== protected void getPositions(string Username, string Password) { // log file path string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string logPath = Path.Combine(desktopFolder, "MasterLog.db"); //================================================================================ // Send request //================================================================================ try { using (StreamWriter w = File.AppendText(logPath)) { // log request w.WriteLine("REQUEST: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + openPositionsString); w.Flush(); w.Close(); } WebRequest request = WebRequest.Create("https://breakermind.com:443/get.php"); Print("===================================================================================="); Print("ALIAS ==>> " + Alias); byte[] postBytes = Encoding.ASCII.GetBytes("line=" + Alias + "&user=" + Username + "&pass=" + Password); request.Proxy = null; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); responseFromServer = reader.ReadToEnd(); } catch (Exception e) { Print("===================================================================================="); Print("Post Error: " + e); Print("===================================================================================="); using (StreamWriter w = File.AppendText(logPath)) { // log response w.WriteLine("ERROR: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + e); w.Flush(); w.Close(); } } Print("===================================================================================="); Print("<<== " + responseFromServer); Print("===================================================================================="); using (StreamWriter w = File.AppendText(logPath)) { // log response w.WriteLine("RESPONSE: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + responseFromServer); w.Flush(); w.Close(); } } /// datatime to timestamp public static double DateTimeToUnixTimestamp(DateTime dateTime) { return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds; } // end //================================================================================================================ // End Send POST to HTTPS Server //================================================================================================================ } }input string responseFromServer:
[GO]23193753;EURUSD;BUY;20000;1,39309;1,36309;1,39809;1399402014,754|23193934;EURUSD;SELL;30000;1,39298;1,42298;1,38798;1399403997,808|23193956;EURUSD;BUY;20000;1,39293;1,37293;1,40293;1399404362,9|23193969;EURUSD;SELL;20000;1,39289;1,41289;1,38289;1399404538,428|23193970;EURUSD;SELL;20000;1,3929;1,4129;1,3829;1399404562,645|23193974;EURUSD;BUY;20000;1,39297;1,37297;1,40297;1399404626,638|23193975;EURUSD;SELL;20000;1,39294;1,41294;1,38294;1399404627,626|[OG]
slave(above) close only SL or TP
and Master for copy positions:
// System using System; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Collections.Generic; // cAlgo using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class NewcBot : Robot { private string responseFromServer = ""; private string openPositionsString = ""; [Parameter("Username", DefaultValue = "")] public string Username { get; set; } [Parameter("Password", DefaultValue = "")] public string Password { get; set; } [Parameter("Volume", DefaultValue = 10000)] public int Volume { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 1000)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 1000)] public int TakeProfit { get; set; } protected override void OnStart() { // Put your initialization logic here } protected override void OnTick() { // Put your core logic here sendPositions(Username, Password); } protected override void OnStop() { // Put your deinitialization logic here } //==================================================================================================================== // Send POST to HTTPS Server //==================================================================================================================== protected void sendPositions(string Username, string Password) { // log file path string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string logPath = Path.Combine(desktopFolder, "MasterLog.db"); // open position var AllPositions = Positions.FindAll(""); openPositionsString = "[GO]"; foreach (var position in AllPositions) { // BUY positions if (position.TradeType == TradeType.Buy) { //openPositionsString += position.Id + ";" + position.SymbolCode + ";" + "BUY" + ";" + position.Volume + ";" + position.EntryPrice + ";" + position.StopLoss + ";" + position.TakeProfit + ";" + DateTimeToUnixTimestamp(position.EntryTime) + ";" + position.Pips + "[X]"; //openPositionsString += position.Id + ";" + position.SymbolCode + ";" + "BUY" + ";" + position.Volume + ";" + position.EntryPrice + ";" + position.StopLoss + ";" + position.TakeProfit + ";" + DateTimeToUnixTimestamp(position.EntryTime) + "[X]"; openPositionsString += position.Id + ";" + position.SymbolCode + ";" + "BUY" + ";" + position.Volume + ";" + position.EntryPrice + ";" + position.StopLoss + ";" + position.TakeProfit + ";" + DateTimeToUnixTimestamp(position.EntryTime) + "|"; } // SELL positions if (position.TradeType == TradeType.Sell) { //openPositionsString += position.Id + ";" + position.SymbolCode + ";" + "SELL" + ";" + position.Volume + ";" + position.EntryPrice + ";" + position.StopLoss + ";" + position.TakeProfit + ";" + DateTimeToUnixTimestamp(position.EntryTime) + ";" + position.Pips + "[X]"; //openPositionsString += position.Id + ";" + position.SymbolCode + ";" + "SELL" + ";" + position.Volume + ";" + position.EntryPrice + ";" + position.StopLoss + ";" + position.TakeProfit + ";" + DateTimeToUnixTimestamp(position.EntryTime) + "[X]"; openPositionsString += position.Id + ";" + position.SymbolCode + ";" + "SELL" + ";" + position.Volume + ";" + position.EntryPrice + ";" + position.StopLoss + ";" + position.TakeProfit + ";" + DateTimeToUnixTimestamp(position.EntryTime) + "|"; } } openPositionsString += "[OG]"; //================================================================================ // Send request //================================================================================ if (responseFromServer == openPositionsString) { Print("Same strings ... wait for new Positions !"); //Notifications.PlaySound("C:\\Windows\\Media\\tada.wav"); } if (responseFromServer != openPositionsString) { try { using (StreamWriter w = File.AppendText(logPath)) { // log request w.WriteLine("REQUEST: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + openPositionsString); w.Flush(); w.Close(); } WebRequest request = WebRequest.Create("https://breakermind.com:443/set.php"); Print("===================================================================================="); Print("==>> " + openPositionsString); Print("===================================================================================="); byte[] postBytes = Encoding.ASCII.GetBytes("line=" + openPositionsString + "&user=" + Username + "&pass=" + Password); request.Proxy = null; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); responseFromServer = reader.ReadToEnd(); if (responseFromServer == "OK") { responseFromServer = openPositionsString; } //openPositionsString = ""; } catch (Exception e) { Print("===================================================================================="); Print("Post Error: " + e); Print("===================================================================================="); using (StreamWriter w = File.AppendText(logPath)) { // log response w.WriteLine("ERROR: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + e); w.Flush(); w.Close(); } } Print("===================================================================================="); Print("<<== " + responseFromServer); Print("===================================================================================="); using (StreamWriter w = File.AppendText(logPath)) { // log response w.WriteLine("RESPONSE: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + responseFromServer); w.Flush(); w.Close(); } } } /// datatime to timestamp public static double DateTimeToUnixTimestamp(DateTime dateTime) { return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds; } // end //================================================================================================================ // End Send POST to HTTPS Server //================================================================================================================ } }
server (www) set.php
<?php file_put_contents("pos.txt", $_POST['line']); echo "OK"; ?>
and server(www) get.php
<?php echo file_get_contents("pos.txt"); ?>
Bye bye bye....
@breakermind
breakermind
28 May 2014, 02:41
RE: Vote
MasterCopyPosition update with force ssl validation for self signed ssl:
// System using System; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Collections.Generic; using System.Security.Cryptography.X509Certificates; using System.Net.Security; // cAlgo using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class BreakermindMasterCopy : Robot { private string responseFromServer = ""; private string openPositionsString = ""; private string openPips = ""; private string account = ""; private int MaxPositions = 20; private int MinVolume = 10000; [Parameter("Username", DefaultValue = "zix")] public string Username { get; set; } [Parameter("Password", DefaultValue = "1231231231")] public string Password { get; set; } [Parameter("Auto Take Profit (pips)", DefaultValue = 200, MinValue = 10)] public int TakeProfitInPips { get; set; } [Parameter("Auto Stop Loss (pips)", DefaultValue = 50, MinValue = 10)] public int StopLossInPips { get; set; } protected override void OnStart() { Print("!!!! Master robot start!!! Account leverage 1:200, min volume" + MinVolume + "(!!! cBot CLOSE ALL position with lower volume !!!)"); Print("!!!! Start capital 1000$, Position required StopLoss and Take profit, Max " + MaxPositions + " positions !!!!"); if (Account.Leverage > 200) { Print("Account leverage incorrect !!! You need leverage <= 1:200, stoping... copier"); Stop(); } foreach (HistoricalTrade trade in History) { // this month closed positions if (DateTime.Now.Month == trade.EntryTime.Month) { Print("Curr month history positions: " + trade.PositionId + " open time " + trade.EntryTime.Month); } } } // onbar we will see... protected override void OnBar() { } protected override void OnTick() { // Put your core logic here try { sendPositions(Username, Password); } catch (Exception e) { var he = e; Print("Wait for positions......."); } } protected override void OnStop() { Print("Master robot stop!!!"); } //==================================================================================================================== // Send POST to HTTPS Server //==================================================================================================================== protected void sendPositions(string Username, string Password) { // log file path string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string logPath = Path.Combine(desktopFolder, "MasterLog.db"); // open position var AllPositions = Positions.FindAll(""); openPositionsString = "[GO]"; openPips = ""; foreach (var position in AllPositions) { if (Positions.Count >= MaxPositions || Positions.Count == 0) { break; } // close with wrong volume if (position.Volume < MinVolume) { Print("cBot Position: " + position.Id + " Wrong Min Volume (" + MinVolume + ") "); if (position.Volume < MinVolume) ClosePosition(position); Print("cBot Closed Position " + position.Id); } if (position.StopLoss == null) { Print("Position {1} SL price is {0}", position.StopLoss, position.Id); } if (position.TakeProfit == null) { Print("Position {1} TP price is {0}", position.StopLoss, position.Id); } if (position.StopLoss == null && position.TakeProfit == null) { Print("Modifying {0}", position.Id); ModifyPosition(position, GetAbsoluteStopLoss(position, StopLossInPips), GetAbsoluteTakeProfit(position, TakeProfitInPips)); } if (position.StopLoss == null) { Print("Modifying {0}", position.Id); //ModifyPosition(position, GetAbsoluteStopLoss(position, StopLossInPips), GetAbsoluteTakeProfit(position, TakeProfitInPips)); ModifyPosition(position, GetAbsoluteStopLoss(position, StopLossInPips), position.TakeProfit); } if (position.TakeProfit == null) { Print("Modifying {0}", position.Id); //ModifyPosition(position, GetAbsoluteStopLoss(position, StopLossInPips), GetAbsoluteTakeProfit(position, TakeProfitInPips)); ModifyPosition(position, position.StopLoss, GetAbsoluteTakeProfit(position, TakeProfitInPips)); } // BUY positions if (position.TradeType == TradeType.Buy && position.Volume >= MinVolume) { openPositionsString += position.Id + ";" + position.SymbolCode + ";" + "BUY" + ";" + position.Volume + ";" + position.EntryPrice + ";" + position.StopLoss + ";" + position.TakeProfit + ";" + DateTimeToUnixTimestamp(position.EntryTime) + "|"; openPips += position.Pips + "|"; } // SELL positions if (position.TradeType == TradeType.Sell && position.Volume >= MinVolume) { openPositionsString += position.Id + ";" + position.SymbolCode + ";" + "SELL" + ";" + position.Volume + ";" + position.EntryPrice + ";" + position.StopLoss + ";" + position.TakeProfit + ";" + DateTimeToUnixTimestamp(position.EntryTime) + "|"; openPips += position.Pips + "|"; } } openPositionsString += "[OG]"; //================================================================================ // Send request //================================================================================ if (responseFromServer == openPositionsString) { Print("Same strings ... wait for new Positions !"); Print("RESPONSE: " + responseFromServer); Print("OPEN POS: " + openPositionsString); } if (responseFromServer != openPositionsString) { // Account parametrs ============================================ account = Math.Round(Account.Equity, 2) + "|" + Math.Round(Account.Balance, 2) + "|" + Math.Round(Account.FreeMargin, 2) + "|" + Math.Round(Account.Margin, 2) + "|" + Math.Round((decimal)Account.MarginLevel, 2) + "|" + Account.Currency + "|" + Account.IsLive + "|" + Account.Leverage; try { using (StreamWriter w = File.AppendText(logPath)) { // log request w.WriteLine("REQUEST: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + openPositionsString); w.Flush(); w.Close(); } //================================================================================ // FORCE CERTYFICATE SSL VALIDATION for self signed(openssl) ssl //================================================================================ ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); //================================================================================ // HTTPS POST //================================================================================ WebRequest request = WebRequest.Create("https://192.168.0.100/set.php"); Print("===================================================================================="); Print("==>> " + openPositionsString); Print("===================================================================================="); byte[] postBytes = Encoding.ASCII.GetBytes("line=" + openPositionsString + "&linepips=" + openPips + "&account=" + account + "&login=" + Username + "&pass=" + Password); //request.Credentials = CredentialCache.DefaultCredentials; request.Proxy = null; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); responseFromServer = ""; responseFromServer = reader.ReadToEnd(); openPositionsString = ""; } catch (Exception e) { Print("===================================================================================="); Print("Post Error: " + e); Print("===================================================================================="); using (StreamWriter w = File.AppendText(logPath)) { // log response w.WriteLine("ERROR: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + e); w.Flush(); w.Close(); } } Print("===================================================================================="); Print("<<== " + responseFromServer); Print("===================================================================================="); using (StreamWriter w = File.AppendText(logPath)) { // log response w.WriteLine("RESPONSE: " + DateTimeToUnixTimestamp(DateTime.UtcNow) + " : " + responseFromServer); w.Flush(); w.Close(); } } } //================================================================================ // modify SL and TP //================================================================================ private double GetAbsoluteStopLoss(Position position, int stopLossInPips) { Symbol Symbol = MarketData.GetSymbol(position.SymbolCode); return position.TradeType == TradeType.Buy ? position.EntryPrice - (Symbol.PipSize * stopLossInPips) : position.EntryPrice + (Symbol.PipSize * stopLossInPips); } private double GetAbsoluteTakeProfit(Position position, int takeProfitInPips) { Symbol Symbol = MarketData.GetSymbol(position.SymbolCode); return position.TradeType == TradeType.Buy ? position.EntryPrice + (Symbol.PipSize * takeProfitInPips) : position.EntryPrice - (Symbol.PipSize * takeProfitInPips); } /// datatime to timestamp public static double DateTimeToUnixTimestamp(DateTime dateTime) { return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds; } // end //================================================================================ // FORCE CERTYFICATE SSL VALIDATION for self signed ssl //================================================================================ public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; } //================================================================================================================ // End Send POST to HTTPS Server //================================================================================================================ } }
@breakermind
breakermind
11 Jun 2014, 09:57
UTC Time
Hi,
unix timestamp utc:
int timestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; Print("String: " + timestamp);
How to get bar open time?
@breakermind
breakermind
24 Mar 2014, 13:19
RE:
breakermind said:
and on server side validate function for
is
@breakermind