Пример кода на java, использующего BTC-E Trade API

Ниже представлен, код на java, для подключения к бирже btc-e.com, с использованием BTC-E Trade API. На странице с описанием Trade API доступен ряд примеров, в том числе и пример на java, который запустить, к сожалению, так и не удалось…

Для сборки примера понадобятся библиотеки:
apache commons-codec-1.8
apache commons-io-2.4
apache httpcomponents-client-4.3.1
json java https://github.com/douglascrockford/JSON-java

Данный код может быть взят за основу при создании торговых роботов, например, для реализации арбитража между биржами btc-e.com и mtgox.com

 

//The software described in this code has no warranty, it is provided “as is”.
//It is your responsibility to validate the behavior of the routines using the source code provided*/
package ru.algotrade.btce;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Hex;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

public class SimpleBTCE {

public static void main(String[] args) throws IOException {

SimpleBTCE btce = new SimpleBTCE();

JSONObject json = btce.authenticatedHTTPRequest("getInfo", null);
System.out.println(json);

HashMap<String, String> param = new HashMap<String, String>();
param.put("count", "2");
json = btce.authenticatedHTTPRequest("TradeHistory", param);
System.out.println(json);
}

private long nonce = System.currentTimeMillis() / 1000L;
private String secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
private String key = "XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX";

private long getNextNonce() {
return ++nonce;
}

private String getKey() {
return key;
}

private String getSecret() {
return secret;
}

private final JSONObject authenticatedHTTPRequest(String method,
Map<String, String> arguments) throws IOException {

if (arguments == null) { // If the user provided no arguments, just
// create an empty argument array.
arguments = new HashMap<String, String>();
}

arguments.put("nonce", "" + getNextNonce()); // Add the dummy nonce.
arguments.put("method", method); // Add the method to the post data.

String postData = "";

// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>(2);

for (Iterator<Entry<String, String>> argumentIterator = arguments
.entrySet().iterator(); argumentIterator.hasNext();) {
Entry<String, String> argument = (Entry<String, String>) argumentIterator
.next();

if (postData.length() > 0) {
postData += "&";
}
postData += argument.getKey() + "=" + argument.getValue();
params.add(new BasicNameValuePair(argument.getKey(), argument
.getValue()));
}

CloseableHttpClient httpclient = HttpClients.createDefault();
JSONObject jsonResult = null;

// Create a new mac
try {

Mac mac;
SecretKeySpec key = null;

key = new SecretKeySpec(getSecret().getBytes("ASCII"), "HmacSHA512");

mac = Mac.getInstance("HmacSHA512");
mac.init(key);
String sign = Hex.encodeHexString(mac.doFinal(postData
.getBytes("UTF-8")));

HttpPost post = new HttpPost("https://btc-e.com/tapi");

post.addHeader("Key", getKey());
post.addHeader("Sign", sign);

post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

String requestResult = httpclient.execute(post,
new SimpleResponseHandler());

jsonResult = new JSONObject(requestResult);

} catch (NoSuchAlgorithmException nsae) {
System.err.println("No such algorithm exception: "
+ nsae.toString());
return null;
} catch (InvalidKeyException ike) {
System.err.println("Invalid key exception: " + ike.toString());
return null;
} finally {
httpclient.close();
}

// Check, if the request was successful
int success = jsonResult.getInt("success");

if (success == 0) { // The request failed.
String errorMessage = jsonResult.getString("error");

System.err.println("btc-e.com trade API request failed: "
+ errorMessage);

return null;
} else { // Request succeeded!
return jsonResult.getJSONObject("return");
}
}

public class SimpleResponseHandler implements ResponseHandler<String> {

@Override
public String handleResponse(HttpResponse response) throws IOException {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
if (entity != null) {
String responce = EntityUtils.toString(entity);
return responce;
}

return null;
} else {
throw new ClientProtocolException(
"Unexpected response status: " + status);
}
}

}
}

Цель: Процесс непрерывного улучшения. Элия М. Гольдратт. Джеф Кокс. The Goal. Eliyahu M. Goldratt. Jeff Cox.

Бизнес бестселлеры. Бережливое производство. Непрерывные улучшения.

По моему глубокому убеждению, эти книги должен прочитать каждый, кто интересуется оптимизацией процессов, личностным развитием, непрерывными улучшениями, бережливым производством. Буду рад, если Вам есть что добавить в этот список.

Робот ворочает деньгами!

Один банкир уронил огромный мешок  с монетами на пол, причем монеты легли в один слой. После этого в комнату запустили робота, который действует по алгоритму: если монета орлом вверх, то он ее переворачивает, если монета решкой вверх то он ее подкидывает вверх. Робот ходит по всей комнате случайным образом. Обозначим за Х отношение числа монет орлом вверх к числу монет решкой вверх. Вопрос: сойдется ли X  к некой константе?

Введение в FIX протокол — видео часть 4

Курс видеолекций из 4 частей по FIX протоколу.

Предназначен для общего ознакомления с основными понятиями и определениями FIX протокола.

Введение в FIX протокол — видео часть 4.

Author: Orbitra

Duration: 535

Published: 2009-02-17 02:02:56

FIX Protocol Introduction Part 4 (ksvali.com)

Введение в FIX протокол — видео часть 3

Курс видеолекций из 4 частей по FIX протоколу.

Предназначен для общего ознакомления с основными понятиями и определениями FIX протокола.

Введение в FIX протокол — видео часть 3.

Author: Orbitra

Duration: 536

Published: 2009-02-17 00:31:45

FIX Protocol Introduction Part 3 (ksvali.com)

Введение в FIX протокол — видео часть 2

Курс видеолекций из 4 частей по FIX протоколу.

Предназначен для общего ознакомления с основными понятиями и определениями FIX протокола.

Введение в FIX протокол — видео часть 2.

Author: Orbitra

Duration: 414

Published: 2009-02-16 22:45:53

FIX Protocol Introduction Part 2 (ksvali.com)

Введение в FIX протокол — видео часть 1

Курс видеолекций из 4 частей по FIX протоколу.

Предназначен для общего ознакомления с основными понятиями и определениями FIX протокола.

Введение в FIX протокол — видео часть 1.

Author: Orbitra

Duration: 566

Published: 2009-02-16 19:58:34

FIX Protocol Introduction Part 1 (ksvali.com)

FIX протокол — международный стандарт обмена биржевой информацией

Financial Information eXchange (FIX) protocol (протокол обмена финансовой информацией, фикс протокол) — международный стандарт обмена данными между участниками биржевых торгов в режиме реального времени. Создан в 1992 году, на сегодняшний спецификация FIX находиться в свободном доступе. Права на спецификацию и право ее поддержки принадлежат компании FIX Protocol, Ltd.

FIXatdl — FIX Algorithmic Trading Definition Language

FIXatdl это относительно новое расширение широко распространненого FIX протокола (фикс протокол). В то время когда FIX протокол является стандартом дефакто в биржевой торговле, появление FIXatdl вызывает вопрос: FIXatdl это полноценное решение для алгоритмической торговли или всего лишь набор новых тегов? Что такое FIXatdl мы постараемся описать в ближайшее время.

Задача о трех муравьях

На одном из собеседований была предложена следующая задача на логику и теорию вероятности:

Три муравья находятся на вершинах равностороннего треугольника.
Затем муравьев отпускают, и каждый муравей может ходить по граням треугольника. Какова вероятность того, что два любых муравья встретятся?

Вывести числа от 0 до 10 без использования циклов

Задача: Написать код, который печатает цифры от 1 до 10 без использования for, while, other cycle, repeat code & hardcoding.

Решение:

#include<stdio.h>

using namespace std;

int func(int i)

{
   printf("%d\n", i);
   if (i == 10) return 0;
   return func(++i);
}

int main()
{
   func(0);
   return 0;
}
 

new(this)

Задача: вызвать конструктор из конструктора.

#include<iostream>
using namespace std;

class A
{
   int x;
   int y;
   int z;
   int xyz;
public:
A()
{
   x = 1;
   y = 2;
   z = 3;
   xyz = 0;
}
A(int xyz)
{
   new(this) A();
   this->xyz = xyz;
   cout << x << y << z << xyz;
}
};
int main()
{
   A a(5);
   return 0;
}

Тест на знание С++

Данные вопросы встречались на тестах в различных банках.

Вопрос 1.

Code:

char a [] = «ABCD\r\n»;

Question: How many elements will be in the array created by the declaration in the sample above?

1.  6
2.  7
3.  8
4.  9
5.  4

Вопрос 2.

Question: Which of the following statements is true when a derivation inherits both a virtual and non-virtual instance of a base class?

  1. Each base class object has derived objects only from the non-virtual instance.
  2. Each base class object has derived objects only from the virtual instance.
  3. Each derived class object has base objects only from the virtual instance.
  4. Each derived class object has base objects only from the non-virtual instance.
  5. Each derived class object has a base object from the virtual instance and a base object from non-virtual instance.

Вопрос 3.

Code:

  string somestring ;

Question: Which of the following choices will convert a standard C++ string object «somestring» to a C string?

  1. Copy.somestring () ;
  2. somestring.c_str ()
  3. std::cstring (somestring)
  4. (char *) somestring
  5. &somestring [1]

Вопрос 4.

Code:

  #include <iostream>

Question: Referring to the sample code above, which of the following could you use to make the standard I/O stream classes accessible without requiring the scope resolution operator?

  1. using iostream ;
  2. using namespace iostream ;
  3. using namespace std ;
  4. using namespace std::iostream ;
  5. using std::iostream ;

Вопрос 5.

Code:

class basex {
  int x;
public:
  void setx(int y) {x=y;}
};
class derived : basex {};

Question: What is the access level for the member function setx in the class derived above?

  1. protected
  2. public
  3. local
  4. private
  5. global

Решения