:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ตั้งค่าการซื้อขายของ Api ให้ create oder แบบมีจุดทศนิยมที่ต่ำกว่าหนึ่งได้

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
banker09
Member
Member
Posts: 2
Joined: Sat Apr 11, 2020 10:06 am

ตั้งค่าการซื้อขายของ Api ให้ create oder แบบมีจุดทศนิยมที่ต่ำกว่าหนึ่งได้

#1

Post by banker09 »

ตอนนี้ผมได้ทำการเขียนโค้ดให้สามารถซื้อขายโดยใช้ Binance Api ผมสามารถ create order ได้แล้วแต่ติดที่ว่าผมไม่สามารถตั้ง price หรือ quantity ให้น้อยกว่า 1 ได้ เช่น 0.001 :flw: ซึ่งมันจำเป็นมากๆในการซื้อขายอัตราเเลกเปลี่ยน อยากได้วิธีการให้มันสามารถตั้ง price หรือ quantity ให้เป็นทศนิยมที่น้อยกว่า 1 เช่น 0.001,0.0234 ครับ

อันนี้คือที่ติดอยู่ครับตรง price กับ quantity ถ้าเปลี่ยนเป็นทศนิยมน้อยกว่า 1 จะขึ้น error
:Expected "{"error_nr":400,"error_txt":"HTTP-Bad Request","response_txt":{"code":-1100,"msg":"Illegal characters found in parameter 'quantity'; legal range is '^([0-9]{1,20})(\\.[0-9]{1,20})?$'."}}" to equal "{}"

Code: Select all

'Test a test order
Dim Params3 As New Dictionary

Params3.Add "symbol", "BTCUSDT"
Params3.Add "side", "BUY"
Params3.Add "type", "LIMIT"
Params3.Add "price", 6000
Params3.Add "quantity", CDec(0.002)
Params3.Add "timeInForce", "GTC"
Params3.Add "timestamp", GetBinanceTime()
TestResult = PrivateBinance("order", "POST", Cred, Params3)
Test.IsEqual TestResult, "{}"


โค้ดทั้งหมดครับ

Code: Select all

'Remove these 2 lines, unless you define 2 constants somewhere ( Public Const secretkey_btce = "the key to use everywhere" etc )
Apikey = apikey_binance
secretKey = secretkey_binance

'Put the credentials in a dictionary


' Create a new test suite
Dim Suite As New TestSuite
Suite.Description = "ModExchBinance"

' Create reporter and attach it to these specs
Dim Reporter As New ImmediateReporter
Reporter.ListenTo Suite
  
' Create a new test
Dim Test As TestCase
Set Test = Suite.Test("TestBinancePublic")

'Error, unknown command
TestResult = PublicBinance("AnUnknownCommand", "GET")
Test.IsOk InStr(TestResult, "error") > 0
Set JsonResult = JsonConverter.ParseJson(TestResult)
Test.IsEqual JsonResult("error_nr"), 404

'Error, command without parameters
TestResult = PublicBinance("depth", "GET")
Test.IsOk InStr(TestResult, "error") > 0
Set JsonResult = JsonConverter.ParseJson(TestResult)
Test.IsEqual JsonResult("error_nr"), 400

'OK request
TestResult = PublicBinance("time", "GET")
'{"serverTime":1513605418615}
Test.IsOk InStr(TestResult, "serverTime") > 0
Set JsonResult = JsonConverter.ParseJson(TestResult)
Test.IsOk JsonResult("serverTime") > 1510000000000#

'Put parameters/options in a dictionary
Dim Params As New Dictionary
Params.Add "symbol", "BNBUSDT"
TestResult = PublicBinance("ticker/24hr", "GET", Params)
'{"symbol":"BNBUSDT","priceChange":"-0.00022700","priceChangePercent":"-0.633","weightedAvgPrice":"0.03538261","prevClosePrice":"0.03586800","lastPrice":"0.03564100","lastQty":"0.14000000","bidPrice":"0.03564100","bidQty":"0.22300000","askPrice":"0.03564800","askQty":"0.43200000","openPrice":"0.03586800","highPrice":"0.03600300","lowPrice":"0.03410000","volume":"380396.97600000","quoteVolume":"13459.43958266","openTime":1551288592637,"closeTime":1551374992637,"firstId":109505628,"lastId":109773015,"count":267388}
Test.IsOk InStr(TestResult, "priceChange") > 0
Test.IsOk InStr(TestResult, "closeTime") > 0
Set JsonResult = JsonConverter.ParseJson(TestResult)
Test.IsEqual JsonResult("symbol"), "BNBUSDT"
Test.IsOk JsonResult("lastPrice") > 0

TestResult = GetBinanceTime()
'e.g. 1516565004894
Test.IsOk TestResult > 1510000000000#

'Unix time period:
t1 = DateToUnixTime("1/1/2014")
t2 = DateToUnixTime("1/1/2018")


Set Test = Suite.Test("TestBinancePrivate GET")
'Binance always requires a timestamp parameter, first test without
TestResult = PrivateBinance("account", "GET", Cred)
'{"code":-1102,"msg":"Mandatory parameter 'timestamp' was not sent, was empty/null, or malformed."}
Test.IsOk InStr(TestResult, "code") > 0
Test.IsOk InStr(TestResult, "Mandatory parameter") > 0
Set JsonResult = JsonConverter.ParseJson(TestResult)
Test.IsEqual JsonResult("response_txt")("code"), -1102


'Add timestamp to the parameters and try again
Dim Params2 As New Dictionary
Params2.Add "timestamp", GetBinanceTime()
TestResult = PrivateBinance("account", "GET", Cred, Params2)
'{"makerCommission":10,"takerCommission":10,"buyerCommission":0,"sellerCommission":0,"canTrade":true,"canWithdraw":true,"canDeposit":true,"updateTime":1512476238993,"balances":[{"asset":"BTC","free":"0.00000000","locked":"0.00000000"},{"asset":"LTC","free":"0.00000000","locked":"0.00000000"},{"asset":"ETH","free":"0.00000000","locked":"0.00000000"},{"asset":"NEO","free":"0.00000000","locked":"0.00000000"},{"asset":"BNB","free":"0.00000000","locked":"0.00000000"},{"asset":"QTUM","free":"0.00000000","locked":"0.00000000"},{"asset":"EOS","free":"0.00000000","locked":"0.00000000"},{"asset":"SNT","free":"0.00000000","locked":"0.00000000"},{"asset":"BNT","free":"0.00000000","locked":"0.00000000"},{"asset":"GAS","free":"0.00000000","locked":"0.00000000"},{"asset":"BCC","free":"0.00000000","locked":"0.00000000"},{"asset":"USDT","free":"0.00000000","locked":"0.00000000"},{"asset":"HSR","free":"0.00000000","locked":"0.00000000"},{"asset":"OAX","free":"0.00000000","locked":"0.00000000"},{...
Test.IsOk InStr(TestResult, "takerCommission") > 0
Test.IsOk InStr(TestResult, "locked") > 0

Set JsonResult = JsonConverter.ParseJson(TestResult)
Test.IsOk JsonResult("takerCommission") > 0
Test.IsOk JsonResult("balances").Count > 10

Dim quantity As Double
Set Test = Suite.Test("TestBinancePrivate POST/DELETE")

'Test a test order
Dim Params3 As New Dictionary

Params3.Add "symbol", "BTCUSDT"
Params3.Add "side", "BUY"
Params3.Add "type", "LIMIT"
Params3.Add "price", 6000
Params3.Add "quantity", CDec(0.002)
Params3.Add "timeInForce", "GTC"
Params3.Add "timestamp", GetBinanceTime()
TestResult = PrivateBinance("order", "POST", Cred, Params3)
Test.IsEqual TestResult, "{}"
User avatar
snasui
Site Admin
Site Admin
Posts: 31255
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ตั้งค่าการซื้อขายของ Api ให้ create oder แบบมีจุดทศนิยมที่ต่ำกว่าหนึ่งได้

#2

Post by snasui »

:D Code นี้น่าจะเป็น VB มากกว่าจะเป็น VBA ซึ่งหากเป็น VB ควรโพสต์ที่หมวดของ VB ส่วนหมวดนี้เป็นหมวดของ Excel ครับ

ปัญหานี้น่าจะเกิดจาก Format ของ Number ลองศึกษาดูจาก Link นี้ครับ https://github.com/sammchardy/python-binance/issues/212, https://github.com/ccxt/ccxt/issues/1054
banker09
Member
Member
Posts: 2
Joined: Sat Apr 11, 2020 10:06 am

Re: ตั้งค่าการซื้อขายของ Api ให้ create oder แบบมีจุดทศนิยมที่ต่ำกว่าหนึ่งได้

#3

Post by banker09 »

ผมเขียนโค้ดนี้ใน vba ครับ ผมลองหาดูใน google แล้วทั้งเว็บไทยและเว็บนอกก็ยังไม่พบวิธีครับ ส่วนลิงค์ที่ส่งให้นำมาปรับใช้ไม่ได้ครับมันไม่ใช่ของตัว vba ครับ ผมลองปรับดูบ้างแล้ว error หมดเลยครับ หรือมีวิธีปรับใช้ยังไบ้างครับ หรือมีวิธีแก้ไขอย่างอื่นอีกไหมครับ
ผมจะทำฟอร์มให้มันออกออเดอร์เองได้ครับแต่ติดตรงนี้แหละครับเลยอยากทราบวิธีแก้ไขครับผม
Capture.PNG
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31255
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ตั้งค่าการซื้อขายของ Api ให้ create oder แบบมีจุดทศนิยมที่ต่ำกว่าหนึ่งได้

#4

Post by snasui »

:D ที่ผมแนบ Link ไปเน้นที่การจัดการรูปแบบของตัวแปรที่เป็นตัวเลข Quantity ว่าต้องไม่เป็นทศนิยมหลักมาก ๆ ที่โปรแกรมมันแปลงด้วยกระบวนการภายในให้แสดงออกมาเป็นตัวเลขทางวิทยาศาสตร์ที่มันจะกลายเป็น เช่น 1e-0x (x คือตัวเลขใด ๆ) และต้องประยุกต์ใช้ ไม่ได้มุ่งหมายให้นำ Code เหล่านั้นมาใช้โดยตรงครับ

หากจัด Format เป็น Double แล้วมีปัญหาลองจัดเป็น String ดูว่าแก้ปัญหาได้หรือไม่ หากแก้ไม่ได้อีกก็ไม่สามารถช่วยได้เช่นกันครับ

ที่ผมเดาว่าเป็น VB เพราะเห็นมีการใช้ Class เข้ามาช่วยทั้งไม่เห็นภาวะแวดล้อมของ Code ครับ
Post Reply