Советники: Block_err_130_PivotStrategy v3_Block

 

Block_err_130_PivotStrategy v3_Block:

Block_err_130 в советнике «О… пивот-уровнях».

Author: Евгений

 

В примере внедрения функции в советник написано:

void OpenPosition(int type)
//-----------
//-----------
   if(type==OP_SELL)
  {OPos=ND(Ask);SLpos=ND(R1);TPpos=ND(S2); 
  

Может будет правильнее?

void OpenPosition(int type)
//-----------
//-----------
   if(type==OP_SELL)
  {OPos=ND(Bid);SLpos=ND(R1);TPpos=ND(S2); 
  
 

Еще вопрос. Попробовал внедрить вашу проверку в свой советник, но когда эта функция отключена, советник на тестере работает лучше. Не могли бы проверить, правильно ли сделаны изменения?

Или эта функция будет проявлять себя во время работы на реале?

int fOrderOpenBuy(){
RefreshRates();
double lts=fGetLotsSimple(OP_BUY);
if(lts>0){
if(!IsTradeContextBusy()){
double slts=ND(Ask-Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(Ask+Point*TakeProfit);
if(TakeProfit==0)tpts=0;
if(Block_err)Block_err_130(2,OP_BUY,0,0,0,ND(Ask),slts,tpts);
int irv=OrderSend(Symbol(),OP_BUY,lts,ND(Ask),Slippage,slts,tpts,Name_exp+"_"+Magic_N,Magic_N,0,CLR_NONE);
if(irv>0){
LastBuyTime=iTime(NULL,TF[TimeFrame],0);
LastSellTime=0;
return(irv);
}else{
int tCheck=GetLastError();
Print ("Error open BUY. "+fMyErDesc(tCheck));
return(-1);
}
}else{
static int lt2=0;
if(lt2!=iTime(NULL,TF[TimeFrame],0)){
lt2=iTime(NULL,TF[TimeFrame],0);
Print("Need open buy. Trade Context Busy");
}
return(-2);
}
} else {
static int lt3=0;
if(lt3!=iTime(NULL,TF[TimeFrame],0)){
lt3=iTime(NULL,TF[TimeFrame],0);
if(lts==-1)Print("Need open buy. No money");
if(lts==-2)Print("Need open buy. Wrong lots size");
}
return(-3);
}

}

//Блок закрытия:

int fOrderCloseMarket(bool aCloseBuy=true,bool aCloseSell=true){
int tErr=0;
//------
int Tip;
int iTicket;
double OPos;
double SLpos;
double TPpos;
double Closepos;
//------
for(int i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==Magic_N ){
if(OrderType()==OP_BUY){
RefreshRates();
if(!IsTradeContextBusy()){
Tip=OrderType();
iTicket=OrderTicket();
OPos=OrderOpenPrice();
SLpos=ND(OrderStopLoss());
TPpos=ND(OrderTakeProfit());
Closepos=ND(OrderClosePrice());
if(Block_err)Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0);
if(!OrderClose(iTicket,OrderLots(),Closepos,Slippage,CLR_NONE)){
int tCheck=GetLastError();
Print("Error close BUY "+OrderTicket()+" "+fMyErDesc(tCheck));
tErr=-1;
}
}
else{
static int lt1=0;
if(lt1!=iTime(NULL,TF[TimeFrame],0)){
lt1=iTime(NULL,TF[TimeFrame],0);
Print("Need close BUY "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
if(OrderType()==OP_SELL && aCloseSell){
RefreshRates();
if(!IsTradeContextBusy()){
Tip=OrderType();
iTicket=OrderTicket();
OPos=OrderOpenPrice();
SLpos=ND(OrderStopLoss());
TPpos=ND(OrderTakeProfit());
Closepos=ND(OrderClosePrice());
if(Block_err)Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0);
if(!OrderClose(iTicket,OrderLots(),Closepos,Slippage,CLR_NONE)){
tCheck=GetLastError();
Print("Error close SELL "+OrderTicket()+" "+fMyErDesc(tCheck));
tErr=-1;
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TF[TimeFrame],0)){
lt2=iTime(NULL,TF[TimeFrame],0);
Print("Need close SELL "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
}
}
}
}
return(tErr);
}

//и в тралл:

int fTrailingWithStart(){
int RetErr=0;
double slts;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY){
RefreshRates();
if(ND(Bid-OrderOpenPrice())>=ND(Point*TrailingStopStart)){
slts=ND(Bid-Point*TrailingStop);
if(ND(OrderStopLoss())<slts){
if(!IsTradeContextBusy()){
if(Block_err)Block_err_130(3,OP_BUY,0,0,0,0,slts,0);
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
int tCheck=GetLastError();
Print("Error trailingstop BUY "+OrderTicket()+" "+fMyErDesc(tCheck));
RetErr=-1;
}
} else {
RetErr=-2;
static int lt1=0;
if(lt1+15<TimeCurrent()){
lt1=TimeCurrent();
Print("Need trailingstop BUY "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
if(OrderType()==OP_SELL){
RefreshRates();
if(ND(OrderOpenPrice()-Ask)>=ND(Point*TrailingStopStart)){
slts=ND(Ask+Point*TrailingStop);
if(!IsTradeContextBusy()){
if(ND(OrderStopLoss())>slts || ND(OrderStopLoss())==0){
if(Block_err)Block_err_130(3,OP_SELL,0,0,0,0,slts,0);
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
tCheck=GetLastError();
Print("Error trailingstop SELL "+OrderTicket()+" "+fMyErDesc(tCheck));
RetErr=-1;
}
}
} else {
RetErr=-2;
static int lt2=0;
if(lt2+15<TimeCurrent()){
lt2=TimeCurrent();
Print("Need trailingstop SELL "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
}
}
return(RetErr);
}
 
Roll:

Для Nail_Saby

Общая характеристика представленных Вами функций на применение Block_err_130:

а) Очевидно, Вы используете внешнюю переменную Block_err для проверки работы функции Block_err_130, и это логически верно (т.к. идет испытание метода). Прописка функции Block_err_130 проходит нормально. Однако, дальнейшая логика построения fOrderOpenBuy() сводит «все на нет» - далее ордер отсылается в любом случае, т.е. независимо от значения Block_err_130,фактически проверки Block_err_130 нет!

б) int fOrderCloseMarket – удовлетворительное применение Block_err_130.

в) int fTrailingWithStart()– неудовлетворительное применение Block_err_130, прописка функции Block_err_130 проходит ненормально. Для Вас обязательно изучение применения Block_err_130 в случае модификации ордера.


Спасибо за пояснения.
 

Не смог исправить блок открытия, но т.к. ордера открываются без СЛ и ТП, думаю, можно считать работает правильно. Блок модицфикации вроде смог подправить...

Итак - на тестере при вкл. блоке профит возростает..., т.е советник действительно начинает работать лучше! (Вот бы еще блок открытия исправить...)

 

Советник этот: http://codebase.mql4.com/ru/code/8854


_

Может на нем покажите как вмонтировать вашу функцию?

 
Nail_Saby:

Советник этот: http://codebase.mql4.com/ru/code/8854


_

Может на нем покажите как вмонтировать вашу функцию?


Block_err_130_exp_ZZSemafor_Block