Size: 2269
Comment:
|
← Revision 10 as of 2013-02-03 22:30:48 ⇥
Size: 2501
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
// STS v0.09a - Smart Trading Script (c) 2012-2013 NeatPortal.com | // STS v0.10g - Smart Trading Script (c) 2012-2013 NeatPortal.com |
Line 6: | Line 6: |
// | // Algorithm is simplified, but should work reasonably well under broad range of conditions // |
Line 9: | Line 10: |
// MAX_TRADE = 9999999 // uncomment if you are using 2720-2734 build |
// uncomment the next line if you are using 2720-2734 build // MAX_TRADE = 9999999 |
Line 26: | Line 27: |
res = 0 | |
Line 31: | Line 31: |
if !m_context.marketReady() goto nextres | res = floor(random() * 4) // choose resource to trade randomly, helps with multiple trading running |
Line 34: | Line 34: |
buyVolume = 0 label trading |
label check if city.tradesArray.length > 8 execute "sleep " + delay |
Line 37: | Line 37: |
if city.tradesArray.length > 8 goto trading | if city.tradesArray.length > 8 goto check label notready if !m_context.marketReady() goto notready prices = [ Price(res, aggr), Price(res, 1 - aggr), Price(res, aggr) * (1 + comm), Price(res, 1 - aggr) * comm ] |
Line 39: | Line 43: |
prices = [ Price(res, aggr), Price(res, 1 - aggr), Price(res, aggr) * (1 + comm), Price(res, 1 - aggr) * comm ] | |
Line 41: | Line 44: |
if canSell > 0 if (prices[1] + prices[3]) / prices[2] < (1 + gain) goto trynext | |
Line 43: | Line 45: |
if sellLimit < 1 sellLimit = min(1, (city.resource.gold - 1) / prices[3]) // we are low on gold sellVolume = floor(min(canSell, sellLimit, 1.1 * MAX_TRADE - buyVolume / 10)) if sellVolume > 0 execute "sell " + res + " " + min(sellVolume, MAX_TRADE) + " " + prices[1] buyVolume = max(0, floor(min(maxRes - city.resource[resName].amount, (city.resource.gold - resGold) / prices[2]))) if buyVolume > 0 execute "buy " + res + " " + min(buyVolume, MAX_TRADE) + " " + prices[0] if city.tradesArray.length < 8 if buyVolume + max(0, sellVolume) > 0 goto trading execute "sleep " + delay label trynext res = (res + 1) MOD 4 |
if canSell > 0 if sellLimit >=1 if prices[1] - prices[3] < prices[2] * (1 + gain) goto nextres if sellLimit < 1 sellLimit = min(max(1, (resGold - city.resource.gold) / prices[1] / 2), (city.resource.gold - 1) / prices[3]) // we are low on gold sellVolume = floor(min(canSell, sellLimit, MAX_TRADE - max(0, floor(min(maxRes - city.resource[resName].amount, (city.resource.gold - resGold) / prices[2]))) / 3)) if sellVolume > 0 execute "sell " + res + " " + sellVolume + " " + prices[1] buyVolume = floor(min(maxRes - city.resource[resName].amount, (city.resource.gold - resGold) / prices[2], MAX_TRADE)) if buyVolume > 0 execute "buy " + res + " " + buyVolume + " " + prices[0] |
// STS v0.10g - Smart Trading Script (c) 2012-2013 NeatPortal.com // WARNING: This script requires NEATBOT 2735+ to run // // The script tries to gain more resources by using spread between bid and ask prices // Algorithm is simplified, but should work reasonably well under broad range of conditions // // Comment out if you want to disable auto start label autorun // uncomment the next line if you are using 2720-2734 build // MAX_TRADE = 9999999 // ===== OPTIONAL CONFIGURATION PARAMETERS ===== // Extra resources to reserve (in addition to city's reserved resources) // food, wood, stone, iron, gold: extra = [ 1m, 1m, 1m, 1m, 100 ] // How aggressive we want to be (lower number would increase trading gains at the cost of potentially slower trade execution) aggr = 2% // Only trade if we expect this much gain gain = 2% // ===== NOTHING TO CONFIGURE BELOW THIS LINE ===== delay = 10 config trade:0 comm = 0.5% maxRes = 990B label nextres res = floor(random() * 4) // choose resource to trade randomly, helps with multiple trading running resName = ResourceIntNames[res] label check if city.tradesArray.length > 8 execute "sleep " + delay if city.tradesArray.length > 8 execute "canceltrade " + city.tradesArray[0].id if city.tradesArray.length > 8 goto check label notready if !m_context.marketReady() goto notready prices = [ Price(res, aggr), Price(res, 1 - aggr), Price(res, aggr) * (1 + comm), Price(res, 1 - aggr) * comm ] resGold = city.reservedResource.gold + extra[4] + max(0, city.resource.gold - city.reservedResource.gold - extra[4]) * 0.8 canSell = (city.resource[resName].amount - city.reservedResource[resName] - extra[res]) * 0.8 sellLimit = (city.resource.gold - resGold) / prices[3] if canSell > 0 if sellLimit >=1 if prices[1] - prices[3] < prices[2] * (1 + gain) goto nextres if sellLimit < 1 sellLimit = min(max(1, (resGold - city.resource.gold) / prices[1] / 2), (city.resource.gold - 1) / prices[3]) // we are low on gold sellVolume = floor(min(canSell, sellLimit, MAX_TRADE - max(0, floor(min(maxRes - city.resource[resName].amount, (city.resource.gold - resGold) / prices[2]))) / 3)) if sellVolume > 0 execute "sell " + res + " " + sellVolume + " " + prices[1] buyVolume = floor(min(maxRes - city.resource[resName].amount, (city.resource.gold - resGold) / prices[2], MAX_TRADE)) if buyVolume > 0 execute "buy " + res + " " + buyVolume + " " + prices[0] goto nextres