BE dla kilku pozycji
BE dla kilku pozycji
Witam, nie mogę rozkminić kodu, który policzy BE dla kilku pozycji o różnym wolumenie. Może ktoś ma coś podobnego lub wie jak to zrobić. Z góry dzięki za pomoc.
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.
Re: BE dla kilku pozycji
Fragment wskaźnika ConPos
W Total Sell Price i Total Buy Price na końcu masz średnie ceny shorta i longa.
Kod: Zaznacz cały
for(i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderComment()==Order_Comment && OrderMagicNumber()==Order_Magic_Number)
{
if(OrderType()==OP_BUY)
{
Total_Buy_Price += OrderOpenPrice()*OrderLots();
Total_Buy_Size += OrderLots();
Long_Profit += OrderProfit() + OrderSwap() + OrderCommission();
if(Bid != OrderOpenPrice())
{
Long_Locked += ((OrderStopLoss()-OrderOpenPrice())/(Bid-OrderOpenPrice()))*OrderProfit();
}
}
if(OrderType()==OP_SELL)
{
Total_Sell_Price += OrderOpenPrice()*OrderLots();
Total_Sell_Size += OrderLots();
Short_Profit += OrderProfit() + OrderSwap() + (OrderCommission()*2);
if(Ask != OrderOpenPrice())
{
Short_Locked += ((OrderOpenPrice()-OrderStopLoss())/(OrderOpenPrice()-Ask))*OrderProfit();
}
}
}
if(Total_Buy_Price>0)
{
Total_Buy_Price /= Total_Buy_Size;
ObjectCreate("Average_Buy_Line",OBJ_HLINE,0,0,Total_Buy_Price);
ObjectSet("Average_Buy_Line",OBJPROP_COLOR,Lime);
}
if(Total_Sell_Price>0)
{
Total_Sell_Price /= Total_Sell_Size;
ObjectCreate("Average_Sell_Line",OBJ_HLINE,0,0,Total_Sell_Price);
ObjectSet("Average_Sell_Line",OBJPROP_COLOR,Red);
}
}
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Re: BE dla kilku pozycji
Liczysz sumę wolumen * cena otwarcia dla wszystkich pozycji i dzielisz przez sumę wolumenów wszystkich pozycji. Prosta średnia ważone, nic skomplikowanego.Mustafa pisze:Witam, nie mogę rozkminić kodu, który policzy BE dla kilku pozycji o różnym wolumenie. Może ktoś ma coś podobnego lub wie jak to zrobić. Z góry dzięki za pomoc.
Re: BE dla kilku pozycji
to jest fragment kodu Luktoma.
level to jest poziom, którego szukasz.
level to jest poziom, którego szukasz.
Kod: Zaznacz cały
double lots=0;
double price=0;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderSymbol()==Symbol()) {
if(OrderType()==OP_BUY) {
price=price+OrderOpenPrice()*OrderLots();
lots=lots+OrderLots();
}
if(OrderType()==OP_SELL) {
price=price-OrderOpenPrice()*OrderLots();
lots=lots-OrderLots();
}
}
}
}
double level=0;
if(lots!=0) {
level=price/lots;