Абдулхаким
Почетный гражданин
что код должен выдавать в том месте где выдаёт значение прибыли ?выдает все верно кроме суммы приболи.
что код должен выдавать в том месте где выдаёт значение прибыли ?выдает все верно кроме суммы приболи.
что код должен выдавать в том месте где выдаёт значение прибыли ?
for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
Ticket = OrderTicket();
Symboly = OrderSymbol();
Type = OrderType();
Lop = OrderLots();
switch(Type)
{
case 0:
OrderTipe = "Buy";
break;
case 1:
OrderTipe = "Sell";
break;
}
}
double SL = OrderStopLoss();
double TP = OrderTakeProfit();
double OP = OrderProfit();
datetime OOP = OrderCloseTime();
double Op = NormalizeDouble(OrderOpenPrice(),Digits);
Comment("Тикет ордера =",Ticket,"\n",
"Валютная пара=",Symboly,"\n",
"Тип ордера=",OrderTipe,"\n",
"Лот ордера=",Lop,"\n",
"Стоплос=",SL,"\n",
"Тейкпрофит=",TP,"\n",
"Цена открытия=",Op,"\n",
"Время закрытия ордера=",OOP,"\n",
"Приболь ордера=",OP);
};
А где учет профита с учетом свопа и комиссии???Эти значения должны быть равны. Но почему то есть разница.
для начала помести Comment и всё что ему причитается в скобки, где выбираешь ордер.Эти значения должны быть равны. Но почему то есть разница.
Теперь работает. Теперь буду думать как закинуть в выбор функции. через свич.А где учет профита с учетом свопа и комиссии???
double flot()
{
for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
if(OrderProfit()+OrderCommission()+OrderSwap()>0)
{
Lop = OrderLots();
Lot=Lop*3;
}
}
};
return(Lot);
}
double LOT()//Функция по расчету лота
{
if(GetLastError()==0)
{
switch(_Lot)
{
case 0:
Lot=Lot;
break;
case 1:
Lot=NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
break;
case 2:
Lot=NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
break;
case 3:
Lot=NormalizeDouble((AccountFreeMargin()*RISK)/1000,2);
break;
case 4:
flot();
break;
}
};
switch(GetLastError())
{
case 131:
Lot=0.01;
break;
case 4051://Этот участок почему то на работает когда терминал выдает эту ошибку
Lot=0.01;
break;
}
return(Lot);
};
void OnTick()
{
if(OrdersTotal()==0)
{
ue(sltp);
uo(svecha);
Stopi();
Comment(SL);
if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,0,"S1 buy",Magic,clrNONE);
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SL,0,"S1 sell",Magic,clrNONE);
}
}
//---------------------------------------------------------------------------------------
double Stopi()
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
OrderTipe="BUY";
SL = sltp[2];
break;
case 1:
OrderTipe="SELL";
SL = sltp[0];
break;
}
};
}
return(SL);
}
Разобрался работаетКод:void OnTick() { if(OrdersTotal()==0) { ue(sltp); uo(svecha); Stopi(); Comment(SL); if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0) ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,0,"S1 buy",Magic,clrNONE); if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0) ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SL,0,"S1 sell",Magic,clrNONE); } } //--------------------------------------------------------------------------------------- double Stopi() { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: OrderTipe="BUY"; SL = sltp[2]; break; case 1: OrderTipe="SELL"; SL = sltp[0]; break; } }; } return(SL); }
Почему-то не работает.
void OrderModifi()//+
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
if(OrderOpenPrice()>SL && OrderStopLoss()!= SL && OrderOpenPrice()>TP && OrderTakeProfit()!=TP)
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,clrYellow);
break;
case 1:
if(OrderOpenPrice()<SL && OrderStopLoss()!= SL)
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0,clrWhite);
break;
}
}
}
}
&& OrderOpenPrice()>TP && OrderTakeProfit()!=TP
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0,clrYellow);
А что, стоп и тейк по одну и ту же сторону от цены открытия позиции? ))Без этой части работает хорошо, лоссы ставяться:Код:void OrderModifi()//+ { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: if(OrderOpenPrice()>SL && OrderStopLoss()!= SL && OrderOpenPrice()>TP && OrderTakeProfit()!=TP) ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,clrYellow); break; case 1: if(OrderOpenPrice()<SL && OrderStopLoss()!= SL) ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0,clrWhite); break; } } } }
Код:&& OrderOpenPrice()>TP && OrderTakeProfit()!=TP
То есть нижняя часть выглядит так:
Код:ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0,clrYellow);
Почему не работает когда дабавляешь тейк профиты. Профиты и лоси определены правильно.
double flot()
{
for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
if(OrderProfit()+OrderCommission()+OrderSwap()>0)
{
Lop = OrderLots();
Lot=Lop*3;
}
else
if(OrderProfit()+OrderCommission()+OrderSwap()<0)
{
Lot=Lot;
}
}
};
return(Lot);
}
void OnTick()
{
Schetorderov();
Alert(P);
ViborStopov();
ViborProfy();
OrderModifi();
if(OrdersTotal()==0)
{
ue(sltp);
uo(svecha);
LOT();
if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"S1 buy",Magic,clrNONE);
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"S1 sell",Magic,clrNONE);
}
}
//++++++++++++double Schetorderov()
{
if(OrdersHistoryTotal()>=3)
{
for( int i=3;i<4; i--)
{
for(int y=0; y<= OrdersHistoryTotal()-1*i; y++)//Начинаем перебор ордеров в истории
{
P=OrderLots();
}
}
}
return(P);
}+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
С циклами полный бред.Код:void OnTick() { Schetorderov(); Alert(P); ViborStopov(); ViborProfy(); OrderModifi(); if(OrdersTotal()==0) { ue(sltp); uo(svecha); LOT(); if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0) ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"S1 buy",Magic,clrNONE); if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0) ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"S1 sell",Magic,clrNONE); } } //++++++++++++double Schetorderov() { if(OrdersHistoryTotal()>=3) { for( int i=3;i<4; i--) { for(int y=0; y<= OrdersHistoryTotal()-1*i; y++)//Начинаем перебор ордеров в истории { P=OrderLots(); } } } return(P); }+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 сделки откроет и тестер зависает. Подскажите почему.
Я планировал эту идею:С циклами полный бред.
for( int i=3;i<4; i--)
В этом цикле нет стопа. i будет уходить в отрицательные значения пока не упрётся в минимальное значение int.
for(int y=0; y<= OrdersHistoryTotal()-1*i; y++)//Начинаем перебор ордеров в истории
Зачем в этом цикле умножить на i?
Stopi2();
OrderModifi();
if(GetLastError()==130)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
if((OrderOpenPrice()>SL && OrderStopLoss()!= SL) || (OrderOpenPrice()<TP && OrderTakeProfit()!=TP))
Print(DoubleToString(Bid,Digits),"____",DoubleToString(Bid-SL,Digits),"___",SL,"___","Buy");
break;
case 1:
if((OrderOpenPrice()<SL && OrderStopLoss()!= SL) || (OrderOpenPrice()>TP && OrderTakeProfit()!=TP))
Print(DoubleToString(Ask,Digits),"_____",DoubleToString(Ask+SL,Digits),"___",SL,"___","Sell");
break;
}
}
}
}
}
if(OrdersTotal()==0)
{
ue(sltp);
uo(svecha);
LOT();
if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"S1 buy",Magic,clrNONE);
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"S1 sell",Magic,clrNONE);
}
gh2[6]=NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
gh2[7]=NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
double Stopi2()
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
if(OrderStopLoss()==0.0)
SL = sltp[6];
break;
case 1:
if(OrderStopLoss()==0.0)
SL = sltp[7];
break;
}
};
}
return(SL);
}
GetLastError()==0
void OnTick()
{
Nbar();
ue(sltp);
ViborStopov();
ViborProfy();
OrderModifi();
if(f_IsNewBar()==true)
stg1();
}
//=======================================================================================
bool f_IsNewBar()//новый бар
{
if(intBars != Bars)
{
intBars = Bars;
return(true);
}
return(false);
}
//***************************************************************************
void OrderModifi()//+
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
if((OrderOpenPrice()>SL && OrderStopLoss()!= SL) || (OrderOpenPrice()<TP && OrderTakeProfit()!=TP))
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,clrYellow);
break;
case 1:
if((OrderOpenPrice()<SL && OrderStopLoss()!= SL) || (OrderOpenPrice()>TP && OrderTakeProfit()!=TP))
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,clrWhite);
break;
}
}
}
}
//*****************************************************************************
void stg1()
{
uo(svecha);
LOT();
TORGI();
switch(rtorg)
{
case 1:
if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"S1 buy",Magic,clrNONE);
break;
case 2:
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"S1 sell",Magic,clrNONE);
break;
case 3:
if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"S1 buy",Magic,clrNONE);
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"S1 sell",Magic,clrNONE);
break;
}
}
//*******************************************************************************