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

 

Дружище, если покопаться в биографиях доброй половины здесь присутствующих, то окажется, что они ваши ровестники. Так что это, не оправдание.

TheXpert:
Я смотрю история действительно цепляет ) спасибо Vinin'у за первосцылку.


 Надо прибить на самое видное место, ибо риал тру.

 
rus001:
я Вас отлично понимаю, честно. и у Вас получилось всё отлично сформулировать, только это не про меня))) единственное что меня касается так это то, что самому мне это не по силам, к сожалению или радости я родился в далёкие времена когда об информатике и компах вообще не слышали) и мне очень сложно научиться что либо программировать, хотя я пробывал изучить это, но видимо не моё... и потому я обратился за помощью, т.к. знаю что советник готовый, но есть лишь незначительная ошибка по которой он не выполняет функцию открывать сделки лишь при закрытии бара, возможно и вероятнее всего эту ошибку видно невооруженным взглядом, нол увы, я её не вижу((( так стоит ли упрекать людей которые обратились за помощью в такой мелочи?

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

Для начала попробуйте заменить условия "нового бара":

   int New_Time=0;                                           
 bool New_Bar=false;                               // ?????? ???? ???
   if(New_Time!=Time[0]) {                      // ?????????? ?????
      New_Time=Time[0];                         // ?????? ????? ?????
      New_Bar=true;}  

на такие: 

   static int New_Time = 0;                                           
   bool New_Bar = false;
   if (New_Time != Time[0])
   {
      New_Time = Time[0];
      New_Bar = true;
   }

может Ваш вопрос и решится.

 
TarasBY:

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

Для начала попробуйте заменить условия "нового бара":

на такие: 

может Ваш вопрос и решится.



спасибо, попробывал, не помогло((( видимо проблема не в этом. в любом случае благодарю за попытку помочь
 
Ничего, если я так сделаю?
//+------------------------------------------------------------------+
//|                                                      rus-xxx.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property copyright 
#property link      
//===========================================================================================================================//
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 start() 
  {
   int New_Time=0;                                           
 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","rus-xxx",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)||(Ask<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)||(Bid>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);
           }
        }
     }
  }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
}
//+------------------------------------------------------------------+
 
rus001:


спасибо, попробывал, не помогло((( видимо проблема не в этом. в любом случае благодарю за попытку помочь

Тогда спросите ещё раз, но поточнее, чего же вы хотите.
 
конечно, только в чём разница?
 
там используется мартин и новый ордер открывает через определённый промежуток в пунктах, но часто цена доходит до открытия, ордер открывается, а цена на этом же баре уходит обратно, так вот мне и нужно сделать чтобы открытие происходило при открытии нового бара если условия остаются. например стоит промежуток 300 пипсов, цена их прошла, но бар ещё не закрылся, цена же в течении этого бара могла ещё пройти какое то кол-во пипсов, например 200 и после этого только бар закрылся и только тогда должна открываться сделка
 
rus001:
там используется мартин и новый ордер открывает через определённый промежуток в пунктах, но часто цена доходит до открытия, ордер открывается, а цена на этом же баре уходит обратно, так вот мне и нужно сделать чтобы открытие происходило при открытии нового бара если условия остаются. например стоит промежуток 300 пипсов, цена их прошла, но бар ещё не закрылся, цена же в течении этого бара могла ещё пройти какое то кол-во пипсов, например 200 и после этого только бар закрылся и только тогда должна открываться сделка

Тогда вам нужно время New_Time записывать не при каждом тике, а в момент выполнения условий открытия, и  далее уже отслеживать открытие нового бара.
 
спасибо, буду разбираться.
 
rus001:
там используется мартин и новый ордер открывает через определённый промежуток в пунктах, но часто цена доходит до открытия, ордер открывается, а цена на этом же баре уходит обратно, так вот мне и нужно сделать чтобы открытие происходило при открытии нового бара если условия остаются. например стоит промежуток 300 пипсов, цена их прошла, но бар ещё не закрылся, цена же в течении этого бара могла ещё пройти какое то кол-во пипсов, например 200 и после этого только бар закрылся и только тогда должна открываться сделка

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

if((b==0&&Procent*(-1)<=y&&s==0&&Close[1]>Open[1]&&New_Bar==true)||(Ask<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)||(Bid>opS+dis-spred&&s>=1&&b==0&&New_Bar==true)) 
  { OrderSend(Symbol(),OP_SELL,LotS,Bid,Slip,0,0,"SEL",Magic,0,Green); }

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

    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);
        }
    }

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

Причина обращения: