我正試圖為我的交易制作一個工具。我已經建立了幾個功能,我可以在我的投資組合中添加新的交易,并關閉交易,將交易從我的投資組合轉移到我的檔案中。但有時我在不同的價格上買入資產,比如期望它下降一點,但由于我不知道我在不同的水平上積累了多少梯子。我想把這些交易也添加到我的作業表中,但是這需要現有的資產更新其金額和購買價格。
這里有一個例子檔案。
https://docs.google.com/spreadsheets/d/1ZGoDwmFmPZa1tifijsPI2aS4L8AXQ0WVNiofpS-xhy8/edit?usp=sharing
有兩個表,一個是提交資料,一個是資料庫。所以基本上,我的第一個挑戰:它不應該寫在最后一行,而是寫在資產已經存在的那一行。第二個挑戰:雖然有些資料可以直接改成新的資訊,但有些資料需要與現有的資料相結合(舊金額 新金額,平均購買價格而不是舊/新購買價格)。
這是 "trademanager "表,你輸入一個交易,它將其復制到組合中。我不想要這個交易的新行,我想要的是用這個新的交易來更新已經存在的資產(添加金額、平均價格,并輸入新的日期、SL和TP資訊
。這是 "porftolio "表,有當前的情況(重復的資產)和期望的情況(新的和舊的資產結合在一起,并在現有的和新的條目之間增加金額和平均價格。
這就是我目前的情況。我知道這與找到獨特的資產并寫入它有關。但我不知道如何將其結合起來。當然,也可能有更簡單的方法。
uj5u.com熱心網友回復: 我相信你的目標是如下的。
在這種情況下,下面的修改腳本如何?
標籤:function updateTrade(){
var ss = SpreadsheetApp.getActiveSpreadsheet()。
var formSS = ss.getSheetByName("Trademanager") 。
var datasheet = ss.getSheetByName("Portfolio") 。
var values = [[formSS.getRange("d3"/span>).getValue()
formSS.getRange("d5").getValue()。
formSS.getRange("d7").getValue()。
formSS.getRange("d9").getValue()。
formSS.getRange("d11").getValue()。
formSS.getRange("d13").getValue()。
'=if(R[0]C[-3]=1,0,(((R[0]C[-1]/R[0]C[-3]-1)*100)/((R[0]C[-3]/R[0]C[-2]-1)*100)))']]
datasheet.getRange(datasheet. getLastRow() 1,1,1,7)。) setValues(values)
}
var SEARCH_COL_IDX = 1;
function searchStr(){
var ss = SpreadsheetApp.getActiveSpreadsheet()。
var formSS = ss.getSheetByName("Trademanager") 。
var str = formSS.getRange("d17").getValue()。
Logger.log(str)。
var values = ss.getSheetByName("Portfolio") 。 getDataRange().getValues()。
for (var i = 0; i < values.length; i ) {
var row = values[i];
if(row[SEARCH_COL_IDX] == str) {
formSS.getRange("d3").setValue(row[0] ) 。
formSS.getRange("d5").setValue(row[1] )。
formSS.getRange("d7").setValue(row[2] )。
formSS.getRange("d9").setValue(row[3] )。
formSS.getRange("d11").setValue(row[4] )。
formSS.getRange("d13").setValue(row[5] )。
formSS.getRange("d25").setValue(row[2] )。)
}
}
修改后的腳本:
function updateTrade(){
var ss = SpreadsheetApp.getActiveSpreadsheet()。
var formSS = ss.getSheetByName("Trademanager") 。
var datasheet = ss.getSheetByName("Portfolio") 。
var colValues = formSS.getRange("D1:D13").getValues() 。
var values = [3, 5, 7, 9, 11, 13]。] map(e => colValues[e - 1] [0])。
var dataRange = datasheet.getRange("A4:F" datasheet.getLastRow() )。
var obj = dataRange.getValues().reduce((o, r) => /span> {
o[r[1] == values[1] ? "dupValues" : "newValues"].push(r)。
return o
}, { newValues: [], dupValues: [] });
if (obj.dupValues.length > 0) {
var [, , occ, odd] = obj.dupValues[0] 。
var [naa, nbb, ncc, ndd, nee, nff] = values;
obj.newValues.push([naa, nbb, occ ncc, ((ndd * ncc) (odd * occ) ) / (occ ncc), nee, nff])。
} else {
obj.newValues.push(values)。
}
dataRange.clearContent()。
datasheet.getRange(4, 1, obj.newValues.length, obj. newValues[0].length).setValues(obj.newValues)。
}
occ ncc的公式和((ndd * ncc) (odd * occ)) / (occ ncc)來自你的樣本電子表格。
參考資料:
