熙熙攘攘!熙熙攘攘!。 - 页 3

 
如果我设置一个固定的手数,一切都很好,但我想要一个动态的手数。所以我想出了上面的脚本,但它不工作,我不知道问题在哪里。@raptor 我想用1000美元余额中的100美元,我知道这是0.1手,因为我的杠杆是1:100,但我希望它是动态的,这样如果系统盈利,余额变高,比如新的余额变成2000美元,我希望它现在用200美元(0.2手)开交易,尊重我设置的百分比,即10%、20%或我设置的任何余额/保证金。@ onewithzachyordersend很好,因为如果我设置固定的手数,即
double lots=0.1;
它就能工作但当我试图像下面那样动态化它时,它说错误的手数。我的账户是微型账户,支持最小0.01手。
extern int LotPercentage=10; // use 10% of balance as lot size

int start()
{

double LotInBalance=(LotPercentage/100)*AccountBalance(); // find the amount that is 10% of balance lets assume its $1000
double LotUnits=LotBalance*AccountLeverage(); // multiply this 10% balance($100) by leverage to get lot units
double lots=NormalizeDouble((LotUnits/100000),2); // expected to return 0.1
/* divide this lot units by 100,000(standard lot size units) and normalize to 2 decimal places to get something like 0.1 if account balance is say $1000 for use in ordersend()*/

...

return 0;

}
同时这也会返回同样的错误,而它甚至更简单
double lots;
double Balance=AccountBalance();
if(Balance<=500){lots=0.1;}                // If my account has $500 or less the lot will be 0.1
if(Balance<1500&&Balance>1000){lots=0.3;}
if(Balance<2500&&Balance>2000){lots=0.5;}
if(Balance<3500&&Balance>3000){lots=0.7;}
if(Balance<4500&&Balance>4000){lots=0.9;}
if(Balance<5500&&Balance>5000){lots=1.1;}
if(Balance<6500&&Balance>6000){lots=1.3;}
if(Balance<7500&&Balance>7000){lots=1.5;}
if(Balance<8500&&Balance>8000){lots=1.7;}
if(Balance<9500&&Balance>9000){lots=1.9;}
if(Balance>10000){lots=2;}                      // If account balance if over 10000 lot is 2

if(/*opening criteria met*/){
OrderSend(Symbol(),OP_BUY,lots,...)
}
请阅读我在代码中的评论,以便更好地理解。
 

不要用真钱做这个。

你想损失10%还是用10%开仓?(答案:第一个!)

double lots;                               // <<== value is zero
double Balance=AccountBalance();

if(Balance<=500){lots=0.1;}                // What the lots if Balance > 500 && <= 1000 ?

if(Balance<1500&&Balance>1000){lots=0.3;}  // read this carefully : if balance bigger than but not equal with 1000
                                           // AND balance also smaller but not equal than 1500.
                                           // Question : what's the lot if balance equal with 1000 and 1500 ?
 

我想用10%开仓,就像有人在账户中存入1000美元,用0.1手开仓一样(如果杠杆是1:100,则10%)。

onewithzachy 你是对的,我确实把它修改成了下面这个样子,而且它也起作用了,但是策略测试 结果比较差,我想最好还是使用固定手数。

double Balance=AccountBalance();
if(Balance<=500||(Balance>500&&Balance<1000)){lots=0.1;}
if((Balance<=1500&&Balance>=1000)||(Balance>1500&&Balance<2000)){lots=0.3;}
if((Balance<=2500&&Balance>=2000)||(Balance>2500&&Balance<3000)){lots=0.5;}
if((Balance<=3500&&Balance>=3000)||(Balance>3500&&Balance<4000)){lots=0.7;}
if((Balance<=4500&&Balance>=4000)||(Balance>4500&&Balance<5000)){lots=0.9;}
if((Balance<=5500&&Balance>=5000)||(Balance>5500&&Balance<6000)){lots=1.1;}
if((Balance<=6500&&Balance>=6000)||(Balance>6500&&Balance<7000)){lots=1.3;}
if((Balance<=7500&&Balance>=7000)||(Balance>7500&&Balance<8000)){lots=1.5;}
if((Balance<=8500&&Balance>=8000)||(Balance>8500&&Balance<9000)){lots=1.7;}
if((Balance<=9500&&Balance>=9000)||(Balance>9500&&Balance<10000)){lots=1.9;}
if(Balance>10000){lots=2;} 
 
jameslarry:
如果我设置一个固定的手数,一切都很好,但我想要一个动态手数。所以我想出了上面的脚本,但它不工作,我不知道问题在哪里。@raptor 我想用1000美元余额中的100美元,我知道这是0.1手,因为我的杠杆是1:100,但我希望它是动态的,这样如果系统盈利,余额变高,比如新的余额变成2000美元,我希望它现在用200美元(0.2手)开交易,尊重我设置的百分比,即10%、20%或我设置的任何余额/保证金。@ onewithzachyordersend是好的,因为如果我设置固定的手数,它可以工作但当我试图像下面那样动态化它,它说错误的手数。我的账户是微型账户,支持最小0.01手。 同样,这也会返回同样的错误,而它甚至更简单。请阅读我在代码中的评论,以便更好地理解。
我认为你对事情的运作方式有很大的误解 . . 保证金要求 和风险不是一回事 ......如果你根据100美元的保证金要求创建一个头寸大小,而你的交易失败了,你的损失可能比100美元多得多,也可能少得多 ...... 保证金要求随着杠杆率的变化而变化 . 风险则不然。
 
不,等等,它确实增加了一些涡轮,我的测试是错误的。如果我可以用一个公式来计算,而不是用大量的if语句来计算,那就太好了。有可能推导出一个公式吗?
 
在某些情况下是有风险的,例如在2012年,如果有涡轮增压就会输,但没有就会赢。
 
哪种方式最安全?
 
jameslarry:
不,等等,它确实增加了一些涡轮,我的测试是错误的。如果我可以用一个公式来计算,而不是用大量的if语句来计算,那就太好了。 有可能推导出一个公式吗?
是的,把你的点画在图上,然后你可以用y=mx+c的形式算出一个线性方程。
 
jameslarry:
哪种方式最安全?
做什么......你实际上还没有解释你想做什么......尽管有人问你具体问题......。......如果你无视那些被问到的问题,以便你能得到帮助,那么你将很快被忽视。