MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1614

 
Fast235 # :

tek soru bu satır

-50 ekstra ve dizi

Bu, "0"ın üstüne/altına çizmek içindir.

ama onsuz da mümkün, kulpların nasıl kullanılacağının özüne ihtiyacım var.

 
Vladimir Simakov # :

Şiddetle tavsiye ederim:

Aksi takdirde oops işe yarayacak)))

Artı, bölünmeden hemen sonra tüm kurşundan hemen önce. Aksi takdirde, ikili hesap çok şey yapabilir)))

 
MakarFX # :

Bu, "0"ın üstüne/altına çizmek içindir.

ama onsuz da mümkün, kulpların nasıl kullanılacağının özüne ihtiyacım var.

tanıtıcı, genellikle OnInit() içinde oluşturulan gösterge dosyasına yönelik bir işaretçidir.

   Handle= iCustom ( Symbol (), PERIOD_H1 , "_iTrend" , 10 );
//--- Если не удалось получить хендл индикатора
   if (Handle== INVALID_HANDLE )
     {
       PrintFormat ( "Failed to create handle of the iAO indicator for the symbol %s/%s, error code %d" ,
                   Symbol (),
                   EnumToString ( Period ()),
                   GetLastError ());
       //---
       return ( INIT_FAILED );
     }

kodun devamı

     if ( CopyBuffer (Handle, 0 , 1 , 1 ,Buffer1) <= 0 проверка на ошибку
---
в Buffer1[ 1111 ] получаем значение
 
Fast235 # :

tanıtıcı, genellikle OnInit() içinde oluşturulan gösterge dosyasına yönelik bir işaretçidir.

kodun devamı

Teşekkür ederim, ama bir referans gibi görünüyor ve ne yazık ki anlamıyorum(

bu yüzden işin mantığını kendim analiz etmek için kodumu mql5'e çevirmek istedim.

şimdilik bunu yapıyorum

 //+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
   prd = _Period > TimeFrame ? _Period : TimeFrame;
   atrHandle = iATR ( _Symbol , prd, Per_Count);
   if (atrHandle == INVALID_HANDLE )
     {
       Print ( "Can't load indicator." ); return INIT_FAILED ;
     }
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Label1Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,Label2Buffer, INDICATOR_DATA );
   
   ArraySetAsSeries (Label1Buffer, true );
   ArraySetAsSeries (Label2Buffer, true );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   int limit,i;
   int barPlus= iBarShift ( _Symbol , _Period , iTime ( _Symbol , PERIOD_W1 ,WeekCount), false );
   limit=rates_total-prev_calculated- 3 ;
   if (WeekCount!= 0 )limit=barPlus- 1 ;
   if (limit< 1 ) return ( 0 );
   for (i=limit;i>= 0 ;i--)
     {
       TimeToStruct (time[i],inTime);
      index01= iBarShift ( _Symbol , PERIOD_D1 ,time[i], false );
       if (inTime.hour== 0 &&inTime.min== 0 )
        {
         Label1Buffer[i]=GetIndicator(atrHandle, index01+ 1 );
        }
     }
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
double GetIndicator( const int handle, const int i)
  {
   double res[ 1 ];
   if ( CopyBuffer (handle, 0 , i, 1 , res) <= 0 ) return 0 ;
   return res[ 0 ];
  }
//+------------------------------------------------------------------+

ancak bir şeylerin yanlış olduğu hissi ve iMAOnArray yardımda hiç bulunamadı.

 

tünaydın.

Martin'in döngü problemini çözemiyorum,

yürütmeden sonra kapanır: (n>=OrdersClose) - ve ardından martin karlı bir işlem gerçekleşene kadar açılmaz,

ve yürütmeden sonra buna ihtiyacım var: (n>=OrdersClose) - dönüş (dLots) gerçekleşir ve bir sonraki anlaşma tekrar kârsız olursa martin yeniden başlar.

lütfen bana nasıl organize edileceğini söyle?

 double LOT()
{
   int n= 0 ;
   double OL=dLots;
   for ( int j = OrdersHistoryTotal()- 1 ; j >= 0 ; j--)
   {
       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMagic)
         {
             if (OrderProfit()< 0 ) 
            {
               if (n== 0 ) OL= NormalizeDouble (OrderLots()*K_Martin,DigitsLot);
               n++;
               if (n>=OrdersClose) { return (dLots);}
            }
             else
            {
               if (n== 0 ) { return (dLots);}
               else { return (OL);}
            }
         }
      }
   }
   return (OL);
}
 

Hepinize iyi günler!!!

Lütfen söyle bana, şebeke danışmanının kodunda, grafikte ortalama fiyatın görüntüsünü kaydettim. Her şey güzel olurdu ama şebeke kapatıldıktan sonra hat doğru bir şekilde silinmiyor yani Çarşamba günü fiyat yok. lütfen bana neyi yanlış yaptığımı söyle. İşte kod ve resim.

//+------------------------------------------- ------------------------------+
//| Grup siparişlerinin değiştirilmesi |
//+------------------------------------------- ------------------------------+
void ModifyOrders(int otype)
{
double avg_price, OrtalamaPriceBuy, OrtalamaPriceSell, order_lots = 0;
fiyat = 0;

for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
fiyat += OrderOpenPrice() * OrderLots();
order_lots += OrderLots() ;
}
}
}
avg_price = NormalizeDouble(fiyat / order_lots, Digits);
OrtalamaPriceBuy = NormalizeDouble(avg_price + Spread, Digits);
OrtalamaPriceSell = NormalizeDouble(avg_price - Spread, Digits);
{
ObjectDelete(0, "OrtalamaFiyatSatırı");
ObjectCreate("AveragePriceLine" ,OBJ_HLINE, 0, 0 ,AveragePriceBuy);
ObjectCreate("AveragePriceLine" ,OBJ_HLINE, 0, 0 ,AveragePriceSell);
ObjectSet("AveragePriceLine",OBJPROP_COLOR,Mavi);
}
if ((otype == OP_BUY) && (Drawdown <= DrawdownClosingTakeprofitZero))
tp = NormalizeDouble(AveragePriceBuy + TakeProfitGroupOrder*Puan, Rakamlar);
if ((otype == OP_SELL) && (Drawdown <= DrawdownClosingTakeprofitZero))
tp = NormalizeDouble(AveragePriceSell - TakeProfitGroupOrder*Puan, Rakamlar);
if ((otype == OP_BUY) && (Drawdown > DrawdownClosingTakeprofitZero))
tp = NormalizeDouble(AveragePriceBuy, Digits);
if ((otype == OP_SELL) && (Drawdown > DrawdownClosingTakeprofitZero))
tp = NormalizeDouble(OrtalamaFiyatSatış, Rakamlar);

for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0)))
Print("Siparişler başarıyla değiştirildi!");
else Print("Siparişler değiştirilirken hata oluştu!");
}
}
}
}


 
EVGENII SHELIPOV # :

Hepinize iyi günler!!!

Lütfen söyle bana, şebeke danışmanının kodunda, grafikte ortalama fiyatın görüntüsünü kaydettim. Her şey güzel olurdu ama şebeke kapatıldıktan sonra hat doğru bir şekilde silinmiyor yani Çarşamba günü fiyat yok. lütfen bana neyi yanlış yaptığımı söyle. İşte kod ve resim.

Bunu dene

 //+----------------------------------------------------------------------------+
//| Модификация групповых ордеров                                              |
//+----------------------------------------------------------------------------+
void ModifyOrders( int otype)
{
     double avg_price, AveragePriceBuy, AveragePriceSell, order_lots = 0 ;
    price = 0 ;
   
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
       {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == otype)
         {
            price += OrderOpenPrice() * OrderLots();
            order_lots += OrderLots() ;
         }
       }
    }
    avg_price = NormalizeDouble (price / order_lots, Digits );
    AveragePriceBuy = NormalizeDouble (avg_price + Spread, Digits );
    AveragePriceSell = NormalizeDouble (avg_price - Spread, Digits );
     if ( ObjectFind ( 0 , "AveragePriceLineBuy" )== 0 )
     {
     ObjectDelete ( 0 , "AveragePriceLineBuy" );
     ObjectCreate ( 0 , "AveragePriceLineBuy" , OBJ_HLINE , 0 , 0 ,AveragePriceBuy);
     ObjectSetInteger ( 0 , "AveragePriceLine" , OBJPROP_COLOR ,Blue);
     }
     else
     {
     ObjectCreate ( 0 , "AveragePriceLineBuy" , OBJ_HLINE , 0 , 0 ,AveragePriceBuy);
     ObjectSetInteger ( 0 , "AveragePriceLine" , OBJPROP_COLOR ,Blue);
     }
     if ( ObjectFind ( 0 , "AveragePriceLineSell" )== 0 )
     {
     ObjectDelete ( 0 , "AveragePriceLineSell" );
     ObjectCreate ( 0 , "AveragePriceLineSell" , OBJ_HLINE , 0 , 0 ,AveragePriceSell);
     ObjectSetInteger ( 0 , "AveragePriceLine" , OBJPROP_COLOR ,Blue);
     }
     else
     {
     ObjectCreate ( 0 , "AveragePriceLineSell" , OBJ_HLINE , 0 , 0 ,AveragePriceSell);
     ObjectSetInteger ( 0 , "AveragePriceLine" , OBJPROP_COLOR ,Blue);
     }
     if ((otype == OP_BUY) && (Drawdown <= DrawdownClosingTakeprofitZero)) 
    tp = NormalizeDouble (AveragePriceBuy + TakeProfitGroupOrder* Point , Digits );
     if ((otype == OP_SELL) && (Drawdown <= DrawdownClosingTakeprofitZero))
    tp = NormalizeDouble (AveragePriceSell - TakeProfitGroupOrder* Point , Digits );
     if ((otype == OP_BUY) && (Drawdown > DrawdownClosingTakeprofitZero)) 
    tp = NormalizeDouble (AveragePriceBuy, Digits );
     if ((otype == OP_SELL) && (Drawdown > DrawdownClosingTakeprofitZero))
    tp = NormalizeDouble (AveragePriceSell, Digits );
    
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) 
    {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
       {
           if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == otype)
           {
               if (OrderModify(OrderTicket(), OrderOpenPrice(), 0 , tp, 0 ))
                   Print ( "Ордера успешно модифицированы!" );
                 else Print ( "Ошибка модификации ордеров!" );
           }
       }
    }
}   

yazmak daha iyi

açık satış emri yoksa satış satırını silin...

körfez için benzer

 
İyi akşamlar, tıklandığında grafik düğmesinin durumu nasıl sıfırlanır, böylece tekrar tıklayana kadar her zaman basılmaz?
 
Nerd Trader # :
İyi akşamlar, tıklandığında grafik düğmesinin durumu nasıl sıfırlanır, böylece tekrar tıklayana kadar her zaman basılmaz?
 ObjectSetInteger ( 0 ,name, OBJPROP_STATE , false );
 
MakarFX # :
Hayır yanlış anladın. Tıklama serbest bırakıldıktan sonra durumun normal düğmeler gibi sıfırlanmasına ihtiyacım var. mql4'te fare düğmesi durumu olayı yoksa bu nasıl uygulanır: bas/bırak.