Znalazłem w internecie przykład EA i wyciąłem część kodu odpowiadającą za kalkulacje wszystkich otwartych transakcji. Dzięki temu fragmentowi chyba EA może obliczać średnią wartość wszystkich otwartych pozycji danego typu i kalkulować TP/SL odpowiednio dla wszystkich pozycji danego typu.
Mam problem z void TrailingAlls
zaraz poniżej wyskakuje błąd jak "komplikuję" w meta editor:
'{' - comma or semicolon expected
Głowiłem się od paru godzin ale chyba trzeba tylko nawet dopisać jeden symbol dlatego myślę że to zajmie chwilkę

Kod: Zaznacz cały
#property copyright "Fragment kodu z neta"
extern double Lots = 0.1;
extern double TakeProfit = 10;
extern double Stoploss = 500;
extern double TrailStart = 10;
extern double TrailStop = 10;
extern double PipStep = 30;
extern int MaxTrades = 10;
bool UseEquityStop = false;
extern bool UseTrailingStop = false;
int MagicNumber = 12324;
double PriceTarget, StartEquity, BuyTarget, SellTarget;
double AveragePrice, SellLimit, BuyLimit;
double LastBuyPrice, LastSellPrice, ClosePrice, Spread;
int flag;
datetime timeprev=0, expiration;
int NumOfTrades=0;
double iLots;
int cnt=0, total;
double Stopper=0;
int ticket;
bool NewOrdersPlaced = false;
int init()
{
Spread = MarketInfo(Symbol(), MODE_SPREAD)*Point;
return(0);
}
int deinit()
{
return(0);
}
int start()
{
if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice);
//----------------------- CALCULATE AVERAGE OPENING PRICE
total=CountTrades();
AveragePrice=0;
double Count = 0;
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
AveragePrice=AveragePrice+OrderOpenPrice()*OrderLots();
Count = Count + OrderLots();
}
}
if(total > 0)
AveragePrice=NormalizeDouble(AveragePrice/Count, Digits);
//----------------------- RECALCULATE STOPLOSS & PROFIT TARGET BASED ON AVERAGE OPENING PRICE
if(NewOrdersPlaced)
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY) // Calculate profit/stop target for long
{
PriceTarget=AveragePrice+(TakeProfit*Point);
BuyTarget = PriceTarget;
Stopper=AveragePrice-(Stoploss*Point);
// Stopper=0;
flag = 1;
}
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_SELL) // Calculate profit/stop target for short
{
PriceTarget=AveragePrice-(TakeProfit*Point);
SellTarget = PriceTarget;
Stopper=AveragePrice+(Stoploss*Point);
flag = 1;
}
}
void TrailingAlls
{ // TUTAj wyskakuje błąd czyli " '{' - comma or semicolon expected
int starty; // zmieniłem z start
int stopy; // zmieniłem z stop
double AvgPrice;
int profit;
double stoptrade;
double stopcal;
if(stopy==0)
return;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
profit=NormalizeDouble((Bid-AvgPrice)/Point,0);
if(profit<starty)
continue;
stoptrade=OrderStopLoss();
stopcal=Bid-(stopy*Point);
if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))
// OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);
OrderModify(OrderTicket(),AvgPrice,stopcal,OrderTakeProfit(),0,Aqua);
}//Long
if(OrderType()==OP_SELL)
{
profit=NormalizeDouble((AvgPrice-Ask)/Point,0);
if(profit<starty)
continue;
stoptrade=OrderStopLoss();
stopcal=Ask+(stopy*Point);
if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))
// OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);
OrderModify(OrderTicket(),AvgPrice,stopcal,OrderTakeProfit(),0,Red);
}//Shrt
}
Sleep(1000);
}//for
}