Buy İşlemi Açarken Sorun Yaşıyorum

 
   int total_OpenSellPositions = GetTotalOpenSellPositions();
   int total_OpenBuyPositions = GetTotalOpenBuyPositions();
      if (total_OpenBuyPositions == 0 && close > MA100_Array[0] )
    {
        Trade.Buy(Baslangic_Lot, _Symbol, Ask, 0, Ask + (Ilk_TP * _Point), NULL);
    }
    else if (close > MA100_Array[0])
    {
        ulong Buylatest_ticket = GetLatestBuyTicketNumber();

        if (PositionSelectByTicket(Buylatest_ticket) == true)
        {
            double position_open_price = PositionGetDouble(POSITION_PRICE_OPEN);

            if (Ask < (position_open_price - (Kademeli_Dusus_Puani * _Point)))
            {
                Trade.Buy(Baslangic_Lot, _Symbol, Ask, 0, Ask + (Sonraki_TP * _Point), NULL);
            }
        }
    } // BUY İŞLEMLERİNİN BİTİŞİ
    
    
      if (total_OpenSellPositions == 0 && close < MA100_Array[0])
    {
        Trade.Sell(Baslangic_Lot, _Symbol, Bid, 0, Bid - (Ilk_TP * _Point), NULL);
    }
    else if (close < MA100_Array[0])
    {
        ulong Selllatest_ticket = GetLatestSellTicketNumber();

        if (PositionSelectByTicket(Selllatest_ticket) == true)
        {
            double position_open_price = PositionGetDouble(POSITION_PRICE_OPEN); 

            if (Bid > (position_open_price + (Kademeli_Dusus_Puani * _Point)))
            {
                Trade.Sell(Baslangic_Lot, _Symbol, Bid, 0, Bid - (Sonraki_TP * _Point), NULL);
            }
        }
    }   
 } // SELL İŞLEMLERİNİN BİTİŞİ 
    


Hareketli ortalama üzerinde buy işlemleri, altında sell işlemleri açsın istiyorum. Bunları ayrı ayrı takip etmesi için döngüler yazdım bunda sorun yok. Başta hareketli ortalama üzerinde olduğu sürece her düşüşte buy işlemleri açıyor, altına gecer geçmez sell işlemine dönüyor ve sell işlemlerine devam ediyor üsttteki buy işlemleri sabit duruyor. ancak tekrar hareketli ortalama üzerine çıktığında dipten buy işlemlerini açmıyor ancak aynı sorun sell işleminde yok bunun sebebi ne olabilir?