Mit dem alten Weiß JavaScript spielen - ein Partner schaffen, der kauft und verkauft.

Schriftsteller:Kleine Träume, Erstellt: 2017-03-06 10:41:40, Aktualisiert: 2017-10-11 10:36:53

Mit dem alten Weiß spielt man mit JavaScript und schafft einen kleinen Partner, der Kauf und Verkauf macht.

Geboren in einer Sandbox

  • Sandbox-System

    Bei der Suche nach Informationen im Internet entdeckt man, dass die Verwendung von Computerprogrammen für den Handel mit Finanzinstrumenten als programmierter Handel, quantitativer Handel bezeichnet wird. Der alte Mathematik-Level ist auch auf Fachniveau, und die Statistik hat nur einige grundlegende Konzepte: Ordnungsverteilung, Erwartung, Koordination usw. Ich wage nicht zu sagen, dass ich am meisten quantifiziert bin, wenn ich programmiert, quantifiziert oder in der Praxis studiere. Das Sandbox-System ist unverzichtbar.

    Der alte Weiß glaubt, dass eine nützliche Sandbox folgende Dinge benötigt:

    • 1. Maximale Simulation der realen Zeitreihen, d.h. die Zeitreihen, die beim Laufen eines Programms in einer Sandbox möglichst nahe an die realen Bedingungen liegen, basierend auf dem Tickspiegel, so dass die Ergebnisse des Tests einen Referenzwert haben.

    • 2. Verschiedene Parameteroptionssteuerungen, die nicht die Parameter des getesteten Programms, sondern die Parameter des Sandbox-Systems erfordern. Zum Beispiel: Einstellungen der Börse (Futures? A-Aktien? Devisen?), simulierte Kontoinformationen der Testbörse, Handlungsgebühren der Börse, mögliche Gleitpunkte, Zeitbereichskontrolle usw.

    • 3. Die Parameter des Programms zu optimieren: Manchmal haben die Alten viele Parameter, um zu versuchen, welche besser ist. Ein gutes Sandbox-System kann eine Reihe von Voreinstellungen akzeptieren und dann selbst laufen, die Ergebnisse analysieren und die besten zeigen.

    • 4. Fehlentests: Die Simulation läuft oft reibungslos, der Wind ist ruhig, weil es sich in der Welle befindet (wie viele große Wellen gibt es?), während es in der Realität unerwartete, unbekannte Stürme im tiefen Ozean gibt.

    • 5, Grafiken zeigen: Grafiken können viele nützliche Daten für die Analyse aufzeichnen, wie z.B. Ertragsdiagramme, Differenzkurven usw.

  • Wir haben ein Sandbox-System in der Hand, und wir schreiben ein paar einfache Codes in JS.

    • 1. Allgemeine Architektur der CTP-Kommoditäts-Futures-Automatisierung Die Unterfläche, die Old White benutzt, hat eine Funktion eingepackt.exchange.IO("status")Hier wird die Frage gestellt: Der Front-Server der Futures-Firma? Der alte Mann antwortet: Die Kommoditäts-Futures verwenden das CTP-Protokoll und haben folgende Verbindungsstrukturen: Terminals für die Kunden der Futuresfirmen (Altweiß-Code) ----> Frontserver der Futuresfirmen -----> Exchange-Server Zurück zum eigentlichen Problem, wenn die Kommoditäts-Futures ausgeschaltet sind, ist es nicht möglich, sich mit dem Vorderserver der Futures-Futures-Firma zu verbinden (die Vorderserver der Futures-Futures-Futures-Futures-Futures-Futures nach einer bestimmten Zeit ausgeschaltet sind); oder einige Situationen führen dazu, dass die CTP die Verbindung unterbricht.

      function MainLoop(){  //  处理具体工作的函数
                          //  编写处理具体交易逻辑
      }
      function main() {
          var status = null;
          while(true){
              status = exchange.IO("status");      //  调用API 确定连接状态
              if(status === true){                 //  判断状态
                  LogStatus("已连接!");            //  在回测或者实际运行中显示一些实时数据、信息。
                  MainLoop();                      //  连接上 交易所服务器后,执行主要工作函数。
              }else{                               //  如果没有连接上 即 exchange.IO("status") 函数返回 false
                  LogStatus("未连接状态!");         //  显示 未连接状态。
              }
              Sleep(1000);                         //  封装的睡眠函数,参数是毫秒,1000毫秒 等于 1秒,需要有轮询间隔, 以免访问过于频繁。CTP协议是每秒推送2次数据。
          }
      }
      

      Ich bin nicht derjenige, der die Leute anruft, um zu wissen, was sie tun.

      img img

      Siehst du in der Abbildung, dass wir das Geld für das Rückprüfungskonto eingestellt haben, 100 W?

      img

    • Wie bekommt man seine Account-Informationsdaten in einem Programm, da die Unterseite in eine Funktion umgewandelt wird?exchange.GetAccount()Ich möchte Ihnen mitteilen, wie sehr ich mich für diese einfache Aussage interessiere.

      function MainLoop(){  //  处理具体工作的函数
          exchange.GetAccount();    
      }
      

      Es gibt nur eine Möglichkeit.MainLoop()Schreiben Sie in die Funktionexchange.GetAccount();

      Das Ergebnis zeigt nichts mehr. Oh! die Funktion ist ausgeführt, aber die Log-Print-Funktion wurde nicht aufgerufen.Log(), Funktionsparameter ist, um verschiedene Variablen auszugeben, können mehrere mit Komma-Intervalen übertragen werden.( Wenn man Code schreibt, kann man außer in der Zeichenkette mit chinesischer Eingabe eingeben, während man den Rest des Codes schreibt, muss man sich immer daran erinnern, Englisch zu wechseln.

      function MainLoop(){                     // 处理具体工作的函数
          Log(exchange.GetAccount());          // 写法1
          var Account = exchange.GetAccount(); // 写法2
      }
      

      img

      Die MainLoop wird ständig ausgeführt (intervall 1 Sekunde) und ist somit ausschließlich von der Sleep-Funktion abhängig.
    • Als nächstes in der Sandbox um einige andere Daten zu bitten, war Old White früher oft auf Schraubstahl, die kommerzielle Futures-Variante konzentriert, weil auch auf die Immobilienpreise konzentriert.

      Zuerst müssen Sie wissen, welche Art von Markt Sie verstehen möchten, zum Beispiel bei einem Schraubstahlvertrag von 1705.exchange.SetContractType("rb1705")Außerdem möchte ich wissen, ob der aktuelle Stand der rb1705-Kontrakte (der Zeitpunkt des Laufens im Rückrufsystem) eingesetzt werden kann.exchange.GetTicker()Ich möchte dann die historischen Preiszyklenstatistiken für diesen Vertrag erfahren.exchange.GetRecords()Sieh mal.MainLoopDie Funktion ändert sich:

      var index = 0;                                                // 声明一个全局变量 用来记录循环次数
      function MainLoop(){
          var ContractInfo = exchange.SetContractType("rb1705");    // 设置我要操作的 商品期货合约类型 即 螺纹钢1705合约。
          if(!ContractInfo){
              return;                                               // 如果设置合约没有成功,即返回函数,再次进入重试。
          }
          Log("rb1705 Info:", ContractInfo);                        // 显示一下合约详细信息。
          var ticker = exchange.GetTicker();                        // 通过CTP协议请求 此刻行情数据
          var records = exchange.GetRecords();                      // 通过CTP协议请求 历史K线数据,K线的周期默认周期是在沙盒系统上设置的。
          Log("ticker:", ticker);                                   // 打印出来 此刻行情数据
          Log("records:", records);                                 // 打印出来 历史K线数据
          Log("index:", index++, "#FF0000");                        // 打印循环次数, 在最后参数传入 "#FF0000" 可以使打印的日志显示为红色。
      }
      

      img

      Auswahl eines Teils von records Variablenwert (Array-Typ): Ich bin nicht derjenige. Der Titel wurde in den USA veröffentlicht. Der Titel wurde in den USA veröffentlicht. Der Titel wurde in den USA veröffentlicht. Time: Die Zeitscheibe, auf der Millisekundenstufe. Open: Öffnungspreis 、High: Höchstpreis 、Low: Niedrigster Preis 、Close: Schließpreis 、Volume: Volumen

      Der Wert der Variablen (Objekte) für den gedruckten Ticker: {COLOR="#FFFFFFFFFF"}Wenn Sie sich für ein Buch entscheiden, dann müssen Sie sich für ein Buch entscheiden. High: aktueller Höchstpreis, Low: aktueller Mindestpreis, Sell: Verkaufspreis, Buy: Kaufpreis, Last: Letzter Handelspreis, Volume: jüngster Handel

      rb1705 Vertragsinformationen: ((Die Beschreibung der Felder in der CTP-Vereinbarung kann angesehen werden.)) - Was ist los? Die Kombination ist: 0, Sie haben sich in der Tat nicht auf die richtige Art und Weise verständigt. Ich habe mich in meinem Haus aufgehalten. Das ist eine sehr schlechte Sache. Sie sind nicht mehr in der Lage, sich selbst zu helfen, wenn Sie nicht in der Lage sind. Sie haben sich in der letzten Woche mit einer neuen Version der Software beschäftigt. Die Anzeige von RB1705 wurde von einer Gruppe von Wissenschaftlern veröffentlicht, die sich mit der Entwicklung von RB1705 beschäftigen. Sie haben sich in den letzten Jahren in der Lage gemacht, sich zu bewegen. Das ist ein großes Problem. Ein weiteres Beispiel ist das Instrument ID: rb1705 Der Name des Instruments lautet: rb1705 Das ist eine sehr schwierige Sache. Die Long Margin Ratio ist: 0.06, Sie können sich auch mit einem anderen Teil der Liste beschäftigen. Das ist ein sehr schwieriger Fall. Ich bin derjenige, der dir das sagen wird. Das ist ein sehr schwieriges Problem. Ich bin der Meinung, dass es eine gute Idee ist, das zu tun. Sie haben sich in den letzten Wochen in der Türkei niedergelassen. Die OptionsType ist: 0, Sie können sich auch mit anderen Personen in Verbindung setzen. Sie ist ein sehr schönes Mädchen. Das ist eine sehr schwierige Sache. Ich bin ein großer Liebhaber von Produkten. Ich bin der Meinung, dass es eine gute Idee ist, ein Produkt zu entwickeln. Der Short Margin Ratio ist: 0.06, Das ist ein sehr schwieriges Thema. Sie haben sich in den letzten Jahren in den USA niedergelassen. "UnderlyingInstrID": Unterliegende Mehrfache: 0, Siehe auch: VolumeMultiple Wir sind hier.

    • Schließlich lassen wir die Roboter in den Sandkasten bewegen.

      Hier wird ein wenig über das Konzept der Kommoditäts-Futures berichtet. In einem Futures-Kontrakt werden sowohl Kauf-Mehrposition-Kontrakte als auch Kauf-Leerposition-Kontrakte als auch Leerposition-Kontrakte bezeichnet, um zu unterscheiden: Kauf-Mehrposition-Kontrakte werden als Leerposition bezeichnet, Kauf-Leerposition-Kontrakte als Leerposition.

Ein Futures-Handel ist ein Handel, bei dem ein Futures-Händler Futures-Kontrakte derselben Sorte, Anzahl und Monat der Auslieferung kauft oder verkauft, aber in der entgegengesetzten Richtung handelt. Der Futures-Händler hat die Möglichkeit, die gekauften Futures-Kontrakte vor dem Ende des letzten Handelstages zu verkaufen oder die verkauften Futures-Kontrakte zurückzukaufen, um einen gleichen Betrag zu erhalten. Gegenwärtige Futuresgeschäfte, um die ursprünglichen Futures-Kontrakte zu verdrängen, beenden Futures-Geschäfte und lösen die Pflicht zur physischen Auslieferung ab. Ich weiß.

##### 所以在期货市场做买卖就有4个方向:

用 ```SetDirection()``` 函数来 确定操作的方向

- 开多仓:SetDirection("buy") ,传入参数 "buy" 字符串,明确 exchange.Buy() 函数为 开多仓 操作, Buy 函数稍后讲到。

- 开空仓:SetDirection("sell"), 传入参数 "sell" 字符串,明确 exchange.Sell() 函数为 开空仓 操作,Sell 函数稍后讲到。

- 平多仓:SetDirection("closebuy"), 传入参数 "closebuy" 字符串, 明确 exchange.Sell()函数为 平多仓操作。

- 平空仓:SetDirection("closesell"), 传入参数 "closesell" 字符串,明确 exchange.Buy()函数为 平空仓操作。

下个单试试!继续改写 MainLoop 函数,我们让程序在沙盒里面每隔10分钟 交易一次,开多仓平多仓交替进行。
```
var index = 0;
var isFirst = true;
function MainLoop(){
    if(isFirst){
        Log(exchange.GetAccount());
        isFirst = false;
    }
    var ContractInfo = exchange.SetContractType("rb1705");
    if(!ContractInfo){
        return;                                               // 如果设置合约没有成功,即返回函数,再次进入重试。
    }
    var ticker = exchange.GetTicker();
    if(index % 2 === 0){
        exchange.SetDirection("buy");
        exchange.Buy(ticker.Last + 1, 1, ticker); // exchange.Buy 函数有2个必要参数,第一个参数为下单价格,
                                          // 第二个参数为下单数量(希望交易的数量),之后还可以跟一些参数输出在日志信息。 
                                          //ticker.Last + 1 是为了让单子能成交,意思是在最后成交价的基础上多出1块钱。
    }else if(index % 2 === 1){
        exchange.SetDirection("closebuy");
        exchange.Sell(ticker.Last - 1, 1, ticker); // ticker.Last - 1 是为了在最后成交价的基础上减去1元 卖出。
    }
    index++;
    Sleep(1000 * 60 * 10 - 1000);         // 这里暂停10分钟 ,减去的1000 即1秒是 main 函数循环中的1秒。
    Log(exchange.GetAccount());
}
```

![img](/upload/asset/bd6dd2ef0e5db88c70f0585aee3a417c92227d31.png) 

##### 开始的账户信息 和 最后一次开仓 前的账户信息比较,可见不能胡乱开仓平仓。 >_<

Bitte schreiben Sie mir einen E-Mail, um Vorschläge und Anmerkungen zu machen, und teilen Sie sie mit anderen Freunden, die gerne handeln und Programme lieben.

https://www.fmz.com/bbs-topic/724

Der Programmierer littleDream, ursprünglich


Mehr