这是我在发布可能已被严重解决/描述的几个问题后的最后一次尝试。我希望得到这个DataFrame:
Signal price buy_units sell_units cashflow balance
Index
0 0 40 0 0 0 100000
1 1 50 2000 0 -100000 0
2 -1 100 0 -2000 +200000 200000
3 1 50 4000 0 -200000 0
4 -1 70 0 -4000 +280000 280000
这是股票交易策略的回溯测试。当Signal
== 1 buy_units
等于当前balance
(前一行的值)除以price
时。然后balance
减少cashflow
(即单位x价格* -1)。其余部分应该是不言自明的。
问题是:在没有迭代的情况下以矢量化方式计算buy_units
。谁知道如何解决这个问题?
最终我想在一个带有"计算单位"的班级中进行设计。和"计算余额"方法,但这在第一步中没有必要。
答案 0 :(得分:1)
如果int Trace(node* root, int find) {
node * searcher = root;
if(!searcher) {
cout << "Node not found" << endl;
//return something here
}
//rest of function stays the same
}
和-1
信号始终如示例所示,则步骤+1
中的余额等于步骤n+2
中的余额乘以价格回报在n
和n+1
之间。
我使用累积产品将其转换为熊猫中的矢量化操作:
n+2
可以从余额中轻松计算现金流量和单位数量。
答案 1 :(得分:0)
您可以创建临时数据框以进行计算:
public class ListActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "bird info";
ListView listView;
ListActivity context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
listView = (ListView)findViewById(R.id.listView);
Intent intent = getIntent();
Habitats habitat = Habitats.detachFrom(intent); //this is an enum type sent as String, converted back to enum.
Cursor cursor;
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
databaseAccess.open();
cursor = databaseAccess.getCursorByHabitat(habitat);
databaseAccess.close();
SpecieCursorAdapter adapter = new SpecieCursorAdapter(this, cursor);
listView.setAdapter(adapter);// how to seperate the image loading?
}
然后对此数据帧执行计算:
temp = df[df.balance == 1]
删除临时数据框:
df.ix[df.balance == 1,'buy_units'] = temp.balance/temp.price