Скачать MetaTrader 5

срочно нужна помощь! - страница 3

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
руслан
66
руслан  
да, действительно, получилось то, что нужно!!! огромная благодарность за помощь! а я то всё думал, что неправильно было сделано... только теперь заметил что в таком виде он перестал открывать сделки sell ))). с чем это связано вообще не пойму.
TarasBY
1740
TarasBY  
rus001:
... только теперь заметил что в таком виде он перестал открывать сделки sell ))). с чем это связано вообще не пойму.
Я надеюсь, Вы советника не на D1 ставите?!
Vladimir Pastushak
77756
Vladimir Pastushak  
TarasBY:

Попробуйте это: 

заменить на это: 

Красным цветом выделил озвученные Вами условия. И не забудьте предыдущее исправление в код внести (определение прихода нового бара).


    if (New_Bar)
    {
        bool lb_send = false;
        if (s == 0)
        {
            if (b == 0) {if (-Procent <= y) if (Close[1] > Open[1]) lb_send = true;}
            else {if (Low[1] < opB - dis - spred) if (Ask < opB - dis - spred) lb_send = true;}
            if (lb_send) OrderSend (Symbol(), OP_BUY, LotB, Ask, Slip, 0, 0, "BUY", Magic, 0, Green);
        }
        else if (b == 0)
        {
            if (s == 0) {if (Procent >= x) if (Close[1] < Open[1]) lb_send = true;}
            else {if (High[1] > opS + dis - spred) if (Bid > opS + dis - spred) lb_send = true;}
            if (lb_send) OrderSend (Symbol(), OP_SELL, LotS, Bid, Slip, 0, 0, "SEL", Magic, 0, Green);
        }
    }

Позвольте не согласиться данный код не соответсвует другим критериям изначально заложенным в советнике ....  Low может быть ниже заданного уровня , но закрытие может быть выше заданного уровня тогда не будет сигнала для открытия ордера , изначально вопрос стоит что бы открывался ордер по закрытию свечи , условием открытия ордера является закрытие которое еще должно быть ниже заданного уровня .....

Данный вариант кода более соответсвует стратегии заложенной в советника 

rus001 простите что не сделал сразу ..... 

extern int Correlyciya= 50;
extern int TakeProfit = 300;
extern double Lot = 0.1;
extern double Procent =1.3;
extern bool Martin = true;
extern int Slip=2;
extern int Magic=1;
int New_Time=0;
int start() 
{
bool New_Bar=false; 
if(New_Time!=Time[0])
{
New_Time=Time[0]; 
New_Bar=true;
} 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
ObjectCreate("R",OBJ_LABEL,0,0,0);
ObjectSet("R",OBJPROP_CORNER,2);
ObjectSet("R",OBJPROP_XDISTANCE,10);
ObjectSet("R",OBJPROP_YDISTANCE,10);
ObjectSetText("R","www.trading-go.ru",10,"Arial",Red);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
double opB=2000; double opS=0; double orderProfitbuy=0; double Sum_Profitbuy=0; double orderProfitsel; double Sum_Profitsel; int orderType;
double LotB=Lot;
double LotS=Lot;
int total=OrdersTotal();
int b=0,s=0,n=0;
for(int i=total-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() )
{
n++;
if(OrderType()==OP_BUY && OrderMagicNumber()==Magic)
{
b++;
LotB=OrderLots();
int tikketB=OrderTicket(); double ProfitB=OrderTakeProfit(); double openB=OrderOpenPrice();
if(openB<opB)
{opB=openB;}
}
//--------------------------------- 
if(OrderType()==OP_SELL && OrderMagicNumber()==Magic)
{
s++;
LotS=OrderLots();
int tikketS=OrderTicket(); double ProfitS=OrderTakeProfit(); double openS=OrderOpenPrice();
if(openS>opS)
{opS=openS;}
}
}
}
}
double max = NormalizeDouble(iHigh(Symbol(),1440,0),Digits);
double min = NormalizeDouble(iLow (Symbol(),1440,0),Digits);
double opp=NormalizeDouble(iOpen(Symbol(),1440,0),Digits);
double cl=NormalizeDouble(iClose(Symbol(),1440,0),Digits);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
if(cl>min)
{
double x=NormalizeDouble(cl*100/min-100,2);
}
//--------------
if(cl<max)
{
double y=NormalizeDouble(cl*100/max-100,2);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

double dis =NormalizeDouble(TakeProfit*Point,Digits);
double spred =NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD)*Point,Digits);
double CORR=NormalizeDouble(Correlyciya *Point,Digits);
if(Martin==true)
{
if(n>=1){for(int P=100; P>=0; P--)
{
if(n==P&&n>=1) {LotB=LotB*P;}
if(n==P&&n>=1) {LotS=LotS*P;}
}
}
}
if(Martin==false)
{
if(b==1||s==1) {LotB=LotS*1;LotS=LotB*1;}
if(b==2||s==2) {LotS=LotS*1;LotB=LotB*1;}
if(b==3||s==3) {LotS=LotS*1;LotB=LotB*1;}

if(b==4||s==4) {LotB=LotS*3;LotS=LotB*3;}
if(b==5||s==5) {LotS=LotS*3;LotB=LotB*3;}
if(b==6||s==6) {LotS=LotS*3;LotB=LotB*3;}

if(b==7||s==7) {LotB=LotS*6;LotS=LotB*6;}
if(b==8||s==8) {LotS=LotS*6;LotB=LotB*6;}
if(b==9||s==9) {LotS=LotS*6;LotB=LotB*6;}
}
if((b==0&&Procent*(-1)<=y&&s==0&&Close[1]>Open[1]&&New_Bar==true)||(Close[1]<opB-dis-spred&&b>=1&&s==0&&New_Bar==true)) { OrderSend(Symbol(),OP_BUY ,LotB,Ask,Slip,0,0,"BUY",Magic,0,Green); }
if((s==0&&Procent >=x&&b==0&&Close[1]<Open[1]&&New_Bar==true)||(Close[1]>opS+dis-spred&&s>=1&&b==0&&New_Bar==true)) { OrderSend(Symbol(),OP_SELL,LotS,Bid,Slip,0,0,"SEL",Magic,0,Green); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
double TPB= NormalizeDouble (openB+spred+TakeProfit*Point,Digits);
double TPS= NormalizeDouble (openS+spred-TakeProfit*Point,Digits);
if(ProfitB==0&&b>=1) { OrderModify(tikketB,openB, OrderStopLoss(),TPB, 0,Blue); }
if(ProfitS==0&&s>=1) { OrderModify(tikketS,openS, OrderStopLoss(),TPS, 0,Blue); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

double nn=0,bb=0;
for(int ui=total-1; ui>=0; ui--)
{
if(OrderSelect(ui,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY && OrderMagicNumber()==Magic)
{
double op=OrderOpenPrice();
double llot=OrderLots();
double itog=op*llot;
bb=bb+itog;
nn=nn+llot;
double factb=bb/nn;
}
}
}
}
double nnn=0,bbb=0;
for(int usi=total-1; usi>=0; usi--)
{
if(OrderSelect(usi,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL && OrderMagicNumber()==Magic)
{
double ops=OrderOpenPrice();
double llots=OrderLots();
double itogs=ops*llots;
bbb=bbb+itogs;
nnn=nnn+llots;
double facts=bbb/nnn;
}
}
}
}

for(int uui=total-1; uui>=0; uui--)
{
if(OrderSelect(uui,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol())
{
if(b>=2 && OrderType()==OP_BUY && OrderMagicNumber()==Magic)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),factb+CORR,0,Blue);
}
if(s>=2 && OrderType()==OP_SELL && OrderMagicNumber()==Magic)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),facts-CORR,0,Blue);
}
}
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
}

 Вы были на 100 % правы , ваша поправка в код улучшила его ...

 

руслан
66
руслан  

Voldemar огромное спасибо!!! респект и уважуха!!! ghot ведь когда автор сам вносит корективы в написаный им самим советник))))

TarasBY
1740
TarasBY  
VOLDEMAR:

Позвольте не согласиться данный код не соответсвует другим критериям изначально заложенным в советнике ....  Low может быть ниже заданного уровня , но закрытие может быть выше заданного уровня тогда не будет сигнала для открытия ордера , изначально вопрос стоит что бы открывался ордер по закрытию свечи , условием открытия ордера является закрытие которое еще должно быть ниже заданного уровня .....

Данный вариант кода более соответсвует стратегии заложенной в советника 

rus001 простите что не сделал сразу ..... 

 Вы были на 100 % правы , ваша поправка в код улучшила его ...

Так вот и аффтор нашёлся!!! Не спорю - аффтору всегда видней. :)))
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий