[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 461

 

Söyle bana, neden benim durumumda OrderSended değişkeni tüm koşullar karşılandığında false değerini almıyor?

 int start()
  {
//----
   int i;
   int i2;
   double MACD;
   double MACD2 = iCustom ( Symbol (), 0 , "MACD" , 5 , 21 , 1 , 0 , 0 );
   double MACD3 = iCustom ( Symbol (), 0 , "MACD" , 5 , 21 , 1 , 0 , 1 );
   double MyNull = 0.0 ;
   int bar1;
   int bar2;
   static bool OrderSended = false;
   
   if (MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0 ) // Вот эти условия
     {
     OrderSended = false;
     }
   Print ( "MACD2 = " ,MACD2, "MACD3 = " ,MACD3, "OrderSended = " ,OrderSended);
   
   if (MACD2 < 0 && MACD3 > 0 && OrderSended == false)
     {
     if ( OrderSend ( Symbol (),OP_SELL,Lot,Ask,Slippage,Ask + StopLoss * Point , 0 ,OrdersComment,MagicNumber, 0 , Red ) > 0 )
       {
       OrderSended = true;
       }
     }
//----
   return ( 0 );
  }

Günlük MACD2 ve MACD3 sıfırdan büyüktür ve OrderSended hala doğrudur, ancak her iki değişken de sıfırdan büyük olduğunda yanlış olması gerekir.

 
sss2019 :

Söyle bana, neden benim durumumda OrderSended değişkeni tüm koşullar karşılandığında false değerini almıyor?

Günlük MACD2 ve MACD3 sıfırdan büyüktür ve OrderSended hala doğrudur, ancak her iki değişken de sıfırdan büyük olduğunda yanlış olması gerekir.

 if (MACD2 < 0 && MACD3 > 0

ve kodda bir sıfırdan büyük, ikincisi daha küçük

 
ilunga :

ve kodda bir sıfırdan büyük, ikincisi daha küçük


Yani bu sadece bir pozisyon açmak için bir sinyal, burada bu yerde koşullar sıfırdan büyük

   if (MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0 ) // Вот эти условия
     {
     OrderSended = false;
     }
 
sss2019 :


Yani bu sadece bir pozisyon açmak için bir sinyal, burada bu yerde koşullar sıfırdan büyük

ama burada yine de parantez koymak güzel olurdu, çünkü koşulların %99'u istediğiniz gibi yanlış sırada hesaplanmıştır:

 if ((MACD2 > 0 && MACD3 > 0 ) || (MACD2 < 0 && MACD3 < 0 )) // Вот эти условия

 

Bu tasarımın işe yarayıp yaramadığını bana bildirin.

 if ( OrdersTotal (MagicNumber))

Yani, belirli bir sihirli numaraya sahip emirler varsa, o zaman...

 
sss2019 :

Bu tasarımın işe yarayıp yaramadığını bana bildirin.

Yani, belirli bir sihirli numaraya sahip emirler varsa, o zaman...

sadece işlevi kendin yazarsan
 int OrdersTotal(int magic)
 
Ama söyle bana, örneğin, bir işlevi yürüttükten sonra, bu işlev bir değeri mi yoksa kullanılan her şeyi mi döndürüyor? Örneğin, bir döngüde iki değişkene değer atanmışsa, döngü her iki değişkenin değerini mi yoksa yalnızca sonuncusunu mu döndürür?
 

Bu yüzden fraktallarla kendi yolumda uğraştım - göstergeyi kendi yolumda yazdım ... benim için daha kolay. Soru şu ki, bir sorunum var.

oklar nasıl 3 çubuk geriye çekilir? :(

Kod parçası...

SetIndexStyle(0, DRAW_ARROW,0,1);
SetIndexArrow(0,217);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexEmptyValue(0, 0.0);
SetIndexStyle(1, DRAW_ARROW,0,1);
SetIndexArrow(1, 218);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexEmptyValue(1, 0.0);

IndicatorShortName("My_iFractals");
SetIndexLabel(0, "iFractalsUp");
SetIndexLabel(1, "iFractalsDn");

UPD

Вопрос снят, сорри опять за кривость свою, но может кому будет интересно ответ - SetIndexShift(0,-3);

 
sss2019 :
Ama söyle bana, örneğin, bir işlevi yürüttükten sonra, bu işlev bir değer mi yoksa kullanılanların hepsini mi döndürüyor? Örneğin, bir döngüde iki değişkene bir değer atanmışsa, döngü her iki değişkenin değerini mi yoksa yalnızca sonuncusunu mu döndürür?

oh ve yulaf lapası..

1) for bir işlev değil, bir döngü ifadesidir

2) işlev yalnızca dönüş ile geri dönmesi söylenen şeyi döndürür

3) döngülü değişkenler gevşek bir şekilde bağlanmıştır. Bir döngüde en az 10 tanesini değiştirebilirsiniz

 

beyler sorunun ne olduğunu anlayamıyorum, kapanış emirleriyle bu durum net değil:

böyle, her şey yolunda gittiğinde:

 double PriceBid = Bid;
         double PriceAsk = Ask;
        PrevPriceBid = PriceBid;
        PrevPriceAsk = PriceAsk;
         double be = GetWeightedBELevel();
         if (be != - 1 )
        {
                 double BuyLots = GetBuyLotsSum();
                 double SellLots = GetSellLotsSum();
                
                 double Swap = GetSwap();
                 //string str = be + " ";
                 if (Swap < 0 )
                {
                         double diff = BuyLots - SellLots;
                         //str = str + MarketInfo(Symbol(), MODE_TICKVALUE) * diff + " " + (-Swap / (MarketInfo(Symbol(), MODE_TICKVALUE) * diff) * Point) + " ";
                        be += ND(-Swap / ( MarketInfo ( Symbol (), MODE_TICKVALUE) * diff) * Point + diff / MathAbs (diff) * 1 * Point );
                }
                 //str = str + Swap + " " + be;
                 //Comment(str);
                
                
                 if ((BuyLots > SellLots && ND(PrevPriceBid) < ND(be + (TakeProfitBuy) * Point ) && ND(PriceBid) >= ND(be + (TakeProfitBuy) * Point )) ||
                        (BuyLots < SellLots && ND(PrevPriceAsk) > ND(be - (TakeProfitSell) * Point ) && ND(PriceAsk) <= ND(be - (TakeProfitSell) * Point )))
                {
                        CloseAllBuy();
                        CloseAllSell();
                }
                

        }
                         ObjectDelete ( "ZeroBuy" );
                 if (BuyLots > SellLots)
                { double ZeroBuy = ND(be + TakeProfitBuy * Point );
                 ObjectCreate ( "ZeroBuy" , OBJ_ARROW , 0 ,Time[ 0 ],ZeroBuy, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "ZeroBuy" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "ZeroBuy" , OBJPROP_COLOR , Olive );}
                         ObjectDelete ( "ZeroSell" );
                 if (BuyLots < SellLots)
                { double ZeroSell = ND(be - TakeProfitSell * Point );
                 ObjectCreate ( "ZeroSell" , OBJ_ARROW , 0 ,Time[ 0 ],ZeroSell, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "ZeroSell" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "ZeroSell" , OBJPROP_COLOR , Olive );}
        
         //---------------------

Bu kodu en üsttekinin altına ekliyorum:

 //+X================================================================X+X+

   int b,s;
   double price,price_b,price_s,lot,lot_s,lot_b,SLb,SLs,SLbTwo,SLsTwo; //
   for ( int i= 0 ; i< OrdersTotal (); i++)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==true)
      {   if ( OrderSymbol ()== Symbol ())
         {
            price = OrderOpenPrice ();
            lot   = OrderLots ();
             if ( OrderType ()==OP_BUY ) 
               {price_b = price_b+price*lot; b++;  lot_b=lot_b+lot;}
             if ( OrderType ()==OP_SELL) 
               {price_s = price_s+price*lot; s++;  lot_s=lot_s+lot;}
   }  }  }
   ObjectDelete ( "SLb" );
   if (b!= 0 ) 
   {  SLb = (price_b/lot_b)+TakeProfitBuy * Point ;
       ObjectCreate ( "SLb" , OBJ_ARROW , 0 ,Time[ 0 ],SLb, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLb" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLb" , OBJPROP_COLOR , Navy );
   }
   ObjectDelete ( "SLbTwo" );
   if (b!= 0 ) 
   {  SLbTwo = (price_b/lot_b)+TakeProfitBuyTwo * Point ;
       ObjectCreate ( "SLbTwo" , OBJ_ARROW , 0 ,Time[ 0 ],SLbTwo, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLbTwo" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLbTwo" , OBJPROP_COLOR , Navy );
   }
   
   ObjectDelete ( "SLs" );
   if (s!= 0 ) 
   {  SLs = (price_s/lot_s)-TakeProfitSell * Point ;
       ObjectCreate ( "SLs" , OBJ_ARROW , 0 ,Time[ 0 ],SLs, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLs" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLs" , OBJPROP_COLOR , Maroon );
   }
   ObjectDelete ( "SLsTwo" );
   if (s!= 0 ) 
   {  SLsTwo = (price_s/lot_s)-TakeProfitSellTwo * Point ;
       ObjectCreate ( "SLsTwo" , OBJ_ARROW , 0 ,Time[ 0 ],SLsTwo, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLsTwo" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLsTwo" , OBJPROP_COLOR , Maroon );
   }
   
   if ((totalBuy > 1 ) && (SLb > Ask) && (SLbTwo < Ask) && (DnM15 > Bid)) //
   {
    CloseAllBuy();
   }
   if ((totalSell > 1 ) && (SLs < Bid) && (SLsTwo > Bid) && (UpM15 < Ask)) //
   {
   CloseAllSell();
   }
   //--------------------------------- 

ilk işlevden sonra artık çalışmıyor ve siparişleri kapatmıyor. Günlükte herhangi bir hata göstermiyor. Neden böyle, nerede hata yaptım?


Tüm Nesneleri her iki işleve de taşıdı ve işe yaradı. soru kaldırıldı!