Цикл по API, который предоставляет определенное значение и обновляет переменную, только если новое значение превышает текущее назначенное значение - PullRequest
0 голосов
/ 29 июня 2018

У меня есть следующий код, и я мог бы использовать некоторую помощь. Приведенный ниже код будет постоянно распечатывать цену покупки и продажи конкретного опциона на акции, который я определяю в строке. Если цена достигнет моей «цели прибыли», она закроет сделку для получения прибыли. Если цена достигнет моего «стоп-лосса», то сделка закроется с убытком. Это хорошо работает.

То, что я сейчас пытаюсь сделать, это создать «Трейлинг Стоп», как только моя «цель прибыли» будет достигнута. Я пытаюсь сделать это, создав другую функцию (может не понадобиться), в которой она будет постоянно проверять «bid» и «ask», но она будет только присваивать значение переменной, ЕСЛИ «bid» или «ask» выше текущего максимума для переменной. Таким образом, я могу включить его в основную функцию и закрыть перевод, если текущая цена опциона на акции, скажем, на 20% ниже, чем "высокая ставка" или "высокая цена" дня.

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

Надеюсь, это имеет смысл. Любое направление документации, которое я мог бы рассмотреть, чтобы помочь мне достичь этого, было бы идеей.

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
    "strings"
)

//Used for structure
var jsonStockResponse QUOTE
var closeTradeResponse CLOSERESPONSE
var jsonHighStockResponse QUOTE

//Values to Modify based on Trade
var targetPrice = 0.97       //Target Profit Price
var stopLossPrice = 0.25     //Close Trade for a Loss if price reaches this point
var trailingStopPrice = 30.0 //Trailing Stop once Target Price is reach. This is a Percentage number

//Values to Modify when "Closing a Trade"//
//Modify the String below with required information and place into the Functions "optionQuote" and "closeTrade"
//Will look like this -- "class=option&symbol=SPY&duration=day&side=sell_to_close&quantity=1&type=market&option_symbol=SPY180629P00267000" --
// Apple Example Option -- AAPL180629C00162500
// SPY Example Option -- SPY180629P00267000

//loop
func main() {
    for {
        bid, ask := optionQuote()
        fmt.Println("Bid:", bid, "Ask:", ask)
        if ask >= targetPrice {
            //closeTrade()
            fmt.Printf("Closing trade for a profit, bid is: %f\n", bid)
            break
        } else if bid < stopLossPrice {
            //closeTrade()
            fmt.Printf("Closing trade for a loss, bid is: %f\n", bid)
            break
        }
    }
}

//This function is used to get the quotes
func optionQuote() (bid, ask float64) {
    url := "https://api.com/v1/markets/quotes"
    payload := strings.NewReader("symbols=SPY180629P00267000")
    req, _ := http.NewRequest("POST", url, payload)
    req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
    req.Header.Add("accept", "application/json")
    req.Header.Add("Authorization", "Bearer ")

    res, _ := http.DefaultClient.Do(req)
    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    //parse response into Json Data
    json.Unmarshal([]byte(body), &jsonStockResponse)

    var cBid = jsonStockResponse.Quotes.Quote.Bid
    var cAsk = jsonStockResponse.Quotes.Quote.Ask

    return cBid, cAsk
}

func optionHighPrice() (bidH, askH float64) {
    url := "https://api.com/v1/markets/quotes"
    payload := strings.NewReader("symbols=SPY180629P00267000")
    req, _ := http.NewRequest("POST", url, payload)
    req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
    req.Header.Add("accept", "application/json")
    req.Header.Add("Authorization", "Bearer ")

    res, _ := http.DefaultClient.Do(req)
    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    //parse response into Json Data
    json.Unmarshal([]byte(body), &jsonStockResponse)

    var hBid = jsonHighStockResponse.Quotes.Quote.Bid
    var hAsk = jsonHighStockResponse.Quotes.Quote.Ask

    return hBid, hAsk
}

//This function is used to close Trade
func closeTrade() {
    url := "https://api.com/v1/accounts/orders"

    payload := strings.NewReader("class=option&symbol=SPY&duration=day&side=sell_to_close&quantity=1&type=market&option_symbol=SPY180629P00267000")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("Authorization", "Bearer ")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    //parse response into Json Data
    json.Unmarshal([]byte(body), &closeTradeResponse)
}

type QUOTE struct {
    Quotes struct {
        Quote struct {
            Symbol           string      `json:"symbol"`
            Description      string      `json:"description"`
            Exch             string      `json:"exch"`
            Type             string      `json:"type"`
            Last             float64     `json:"last"`
            Change           float64     `json:"change"`
            ChangePercentage float64     `json:"change_percentage"`
            Volume           int         `json:"volume"`
            AverageVolume    int         `json:"average_volume"`
            LastVolume       int         `json:"last_volume"`
            TradeDate        int64       `json:"trade_date"`
            Open             interface{} `json:"open"`
            High             interface{} `json:"high"`
            Low              interface{} `json:"low"`
            Close            interface{} `json:"close"`
            Prevclose        float64     `json:"prevclose"`
            Week52High       float64     `json:"week_52_high"`
            Week52Low        float64     `json:"week_52_low"`
            Bid              float64     `json:"bid"`
            Bidsize          int         `json:"bidsize"`
            Bidexch          string      `json:"bidexch"`
            BidDate          int64       `json:"bid_date"`
            Ask              float64     `json:"ask"`
            Asksize          int         `json:"asksize"`
            Askexch          string      `json:"askexch"`
            AskDate          int64       `json:"ask_date"`
            OpenInterest     int         `json:"open_interest"`
            Underlying       string      `json:"underlying"`
            Strike           float64     `json:"strike"`
            ContractSize     int         `json:"contract_size"`
            ExpirationDate   string      `json:"expiration_date"`
            ExpirationType   string      `json:"expiration_type"`
            OptionType       string      `json:"option_type"`
            RootSymbol       string      `json:"root_symbol"`
        } `json:"quote"`
    } `json:"quotes"`
}

type CLOSERESPONSE struct {
    Order struct {
        ID        int    `json:"id"`
        Status    string `json:"status"`
        PartnerID string `json:"partner_id"`
    } `json:"order"`
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...