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
$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);@breakermind