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

 
Yan Barmin :
Kafası karışmış. Tüm komisyonları, takasları vb. dikkate alarak MT4'te açık bir siparişte (gecikme değil) gerçek bir kâr (zarar) nasıl elde edilir. (yani pozisyonu kapattıktan sonra ne elde edeceğiz)? OrderProfit() + OrderSwap() + OrderCommission() veya sadece OrderProfit() veya başka bir şey? Sipariş kapandıktan sonra en azından bir şeyler kazanmak istiyorum.
 OrderProfit() + OrderSwap() + OrderCommission()
 

Bu hacim rakamları bodrum penceresindeki mumlara, yani aşağıdan nasıl yerleştirilir veya bodrum ile çalışmazsa, tüm sayıları merkezde yatay olarak aynı çizgi boyunca gidecek şekilde nasıl yapılır. Yardımın için çok minnettar olurum.

#özellik göstergesi_chart_window

#özellik göstergesi_width1 2
#özellik göstergesi_width2 2
#özellik göstergesi_width3 2
#özellik göstergesi_width4 4
#özellik göstergesi_width5 4

#özellik göstergesi_renk1 Gök Mavisi
#özellik göstergesi_color2 Bordo
#özellik göstergesi_color3 Sarı
#özellik göstergesi_color4 Mavi
#özellik göstergesi_color5 DeepPink

extern int BarsToCount = 990;

dış dize pus1 = "";
extern string p_s = "Puan ayarları";
extern bool use_points = true;
harici int mesafe_noktası = 5;
dış renk color_point_u = kireç;
dış renk color_point_d = DeepPink;
dış renk color_point_s = Sarı;
harici int size_point = 14;

dış dize pus2 = "";
harici string s_w = "yol";
extern bool use_show_same_way = doğru;
extern bool use_show_daily_way = true;

dış dize pus3 = "";
extern string al = "Uyarılar";
extern bool use_alerts = yanlış;
extern string up_alert = "Yukarı";
extern string down_alert = "Aşağı";


ikiye katlamak[];
çift aşağı[];
çift orta[];
ikiye katla2[];
çift aşağı2[];
çift yok[];

static int prevtime = 0;

//
int init()
{

GöstergeKısaAdı("A");
dönüş(0);
}

//
int tanım()
{
string name_de;
for(int c=BarsToCount;c>=0;c--)
{
name_de="Vol_"+DoubleToStr(c,0);
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de);
}
dönüş(0);
}
/////////////////////////////////////
int başlangıç()
{
///////////
yukarı[0]=BOŞ_VALUE;
aşağı[0]=BOŞ_VALUE;
mid[0]=BOŞ_VALUE;
if(Close[0]>Open[0]) up[0]=Volume[0];
if(Close[0]<Open[0]) down[0]=Volume[0];
if(Close[0]==Open[0]) mid[0]=Volume[0];

///////////////
if(use_points)
obcre(0);

if(!use_points)
Obdel(0);
///////////
if (Zaman[0] == önceki zaman) return(0);
prevtime = Zaman[0];
////////////////////////
for(int c=BarsToCount;c>=1;c--)
{
///////////
if(use_points)
Obcre(c);

if(!use_points)
Ob_del(c);
///////////
yukarı[c]=BOŞ_DEĞER;
aşağı[c]=BOŞ_DEĞER;
orta[c]=BOŞ_DEĞER;
up2[c]=BOŞ_DEĞER;
down2[c]=BOŞ_DEĞER;

////////////////
if(Kapat[c]>Aç[c]) up[c]=Hacim[c];
if(Close[c]<Open[c]) down[c]=Volume[c];
if(Kapat[c]==Aç[c]) mid[c]=Hacim[c];
yok[c]=Hacim[c]+Hacim[c]/6;


/////////////
if(use_show_same_way)
{

if(Kapat[c]>Aç[c] && Kapat[c+1]>Aç[c+1])
{
up2[c]=Hacim[c]; up2[c+1]=Hacim[c+1];
yukarı[c]=BOŞ_DEĞER; yukarı[c+1]=BOŞ_DEĞER;
}

if(Kapat[c]<Aç[c] && Kapat[c+1]<Aç[c+1])
{
down2[c]=Hacim[c]; down2[c+1]=Hacim[c+1];
aşağı[c]=BOŞ_DEĞER; aşağı[c+1]=BOŞ_DEĞER;
}

}


if(use_alerts)
{
if(up2[1]!=BOŞ_DEĞER && up2[4]==BOŞ_DEĞER) Alert(up_alert);
if(down2[1]!=BOŞ_DEĞER && down2[4]==BOŞ_DEĞER) Alert(down_alert);
}
}
dönüş(0);
}
//işlev
//+------------------------------------------- -------------------+/////////////////////////// /
geçersiz Ob_cre(int num_of_bar)
{
string name="Vol_"+DoubleToStr(num_of_bar,0);

colorcol_po;
if(Close[num_of_bar]>Open[num_of_bar]) col_po=color_point_u;
if(Close[num_of_bar]<Open[num_of_bar]) col_po=color_point_d;
if(Close[num_of_bar]==Aç[num_of_bar]) col_po=color_point_s;

if(ObjectFind(ad)==-1)
{
ObjectCreate(isim, OBJ_TEXT ,0,0,0);
}
ObjectSet(name,OBJPROP_TIME1,Time[sayı_bar]);
ObjectSet(name,OBJPROP_PRICE1,Yüksek[sayı_bar]+mesafe_noktası*Nokta);
ObjectSet(isim,OBJPROP_ANGLE,90);
ObjectSetText(name,DoubleToStr(Volume[sayı_bar],0),size_point,"Arrial",col_po);
ObjectSet(isim,OBJPROP_ANCHOR,ANCHOR_CENTER);
}

//
geçersiz Ob_del(int num_of_bar)
{
string name="Vol_"+DoubleToStr(num_of_bar,0);
}

Dosyalar:
 

EURUSD'ye dayalı sentetik bir sembol oluşturuyorum, adı ZIGZAG (isim çakışmalarını önlemek için)

Dakika çubuklarını içe aktarıyorum, her şey başarılı bir şekilde içe aktarılıyor, ancak tekrarlanan istek üzerine çubuk sayısı 0'dır. "history\symbol" klasöründe 39 mb hacminde oluşturulmuş bir "2019.hcc" dosyası var, klasörde "keneler" her şey boş. Terminali değiştirdim (30 Mayıs 2019 tarihli güncel sürüm), bilgisayar her yerde çalışmıyor.

Ne yanlış olabilir?

Dosyalar:
simvol.zip  809 kb
 
SEM :

EURUSD'ye dayalı sentetik bir sembol oluşturuyorum, adı ZIGZAG (isim çakışmalarını önlemek için)

Dakika çubuklarını içe aktarıyorum, her şey başarılı bir şekilde içe aktarılıyor ancak tekrarlanan istek üzerine çubuk sayısı 0'dır. "history\symbol" klasöründe 39 mb hacminde oluşturulmuş bir "2019.hcc" dosyası var, klasörde "keneler" her şey boş. Terminali değiştirdim (30 Mayıs 2019 tarihli güncel sürüm), bilgisayar her yerde çalışmıyor.

Ne yanlış olabilir?

İsimlerin çakışmasında
 
Herkese selam. Peki ya MT 4'te Demo versiyonundaki Balance makalesini sonlandıracak ve onu değiştirilebilir hale getirecek olan gerçek ne olacak? Demo bakiyesini kendi takdirinize göre değiştirme fırsatı ne olurdu. Veya doldurun. veya demo fonlarını çekip demoda alım satımı gerçek olana mümkün olduğunca yakın hale getirmek mi?
 
oleqas1 :
Herkese selam. Peki ya MT 4'te Demo versiyonundaki Balance makalesini sonlandıracak ve onu değiştirilebilir hale getirecek olan gerçek ne olacak? Demo bakiyesini kendi takdirinize göre değiştirme fırsatı ne olurdu. Veya doldurun. veya demo fonlarını çekip demoda alım satımı gerçek olana mümkün olduğunca yakın hale getirmek mi?

MetaTrader4 artık değiştirilmeyecek - bu platformun gelişimi uzun süredir durduruldu. Maksimum - önemli hatalar düzeltildi.

MetaTrader5'e geçin ve TesterWithdrawal() kullanın

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Merhaba, 3 günlük Avrupa seansının oynaklığı nasıl hesaplanır?
 

Merhaba, örneğin buystop ve buylimit varsa.

Buystop açılır, satın alma limitini değiştirmeniz ve yeni bir buystop belirlemeniz gerekir.

Buylimit açılır, buystop'u değiştirmeniz ve yeni bir buylimit belirlemeniz gerekir.

Denedim açılıyor ama OrderModify error 1, OrderModify error 130 hata veriyor, nasıl düzelteceğimi çözemedim. Lütfen yardım edin.


 void OnTick ()
  {
      price_buystop = NormalizeDouble (Ask+StopLoss* Point , Digits );
      price_buyLimit = NormalizeDouble (price_buystop-StopLoss* 2 * Point , Digits );
      price_buy = PriceOpenLastPos();
      
       //для байстоп
         if (BuyStopCount()== 0 ) //если нет байстопа
       { 
       TP= NormalizeDouble (price_buystop + TakeProfit* Point , Digits );
       SL= NormalizeDouble (price_buystop - StopLoss* Point , Digits );  
       if (CountBuy()== 0 ) // и нет открытых бай 
       {    
       int ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP, "buystop" ,Magic, 0 ,Blue);       
       if (ticket < 0 ) Print ( "Не удалось открыть buystop " );
       }
         if (CountBuy()>= 1 ) // если нет байстоп но есть открытая
         {  
        price_buystop = NormalizeDouble (price_buy + StopLoss* Point , Digits );
         int ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP, "buystop" ,Magic, 0 ,Blue);       
         if (ticket < 0 ) Print ( "Не удалось открыть buystop " );            
         } 
      } else {   //если есть байстоп модифицируем
       if (CountBuy()>= 1 ) //и есть открытые и байстоп
         {        
         price_buystop = NormalizeDouble (price_buy+StopLoss* Point , Digits );
         TP= NormalizeDouble (price_buystop + TakeProfit* Point , Digits );
         SL= NormalizeDouble (price_buystop - StopLoss* Point , Digits );        
         bool res = OrderModify(OrderTicket(),price_buystop,SL,TP, 0 ,Blue);     
         }   
      }
      
   //для байлимит
         if (BuyLimitCount()== 0 ) // если нет байлимит
       {   
       TP= NormalizeDouble (price_buyLimit + TakeProfit* Point , Digits );
       SL= NormalizeDouble (price_buyLimit - StopLoss* Point , Digits ); 
         if (CountBuy()== 0 ) // и нет открытых открываем
        {
         int ticket= OrderSend ( Symbol (),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP, "BuyLimit" ,Magic, 0 ,Blue);       
         if (ticket < 0 ) Print ( "Не удалось открыть BuyLimit " );   
        }
         if (CountBuy()>= 1 ) // если открытая есть
         {         
        price_buyLimit = NormalizeDouble (price_buy - StopLoss* Point , Digits );       
         int ticket= OrderSend ( Symbol (),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP, "BuyLimit" ,Magic, 0 ,Blue);         
         if (ticket < 0 ) Print ( "Не удалось открыть BuyLimit " );            
         }           
      }   else { // если есть байлимит и есть открытая
       if (CountBuy()>= 1 )
         {
         price_buyLimit = NormalizeDouble (price_buy-StopLoss* Point , Digits );         
         TP= NormalizeDouble (price_buyLimit + TakeProfit* Point , Digits );
         SL= NormalizeDouble (price_buyLimit - StopLoss* Point , Digits );        
         bool res = OrderModify(OrderTicket(),price_buyLimit,SL,TP, 0 ,Blue);    
         }   
      }
   
  }
//+------------------------------------------------------------------+
// проверяем есть ли байстоп ордера с конца
   int BuyStopCount()
  {
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES) == true && 
        OrderMagicNumber()== Magic && OrderType() == OP_BUYSTOP )                        
        {
        count ++;
        }
    }
     return (count); 
  }
  
   // проверяем есть ли ,байлимит ордера с конца
   int BuyLimitCount()
  {
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber()== Magic &&                        
        OrderType() == OP_BUYLIMIT )                       
        {
        count ++;
        }
    }
     return (count);      
  }
  
   //проверяем открытые ордера покупку
   int CountBuy()
  {
   int count = 0 ;
   for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade --)
  {
     if ( OrderSelect (trade, SELECT_BY_POS, MODE_TRADES) == true )
    {
       if (OrderSymbol()== Symbol () && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
        count++;
    }
   } return (count);
  }
  
  
   // возвращает цену открытия последней открытой позиции
  
   double PriceOpenLastPos()
{
int k= OrdersTotal ();
double r = 0 ;
int i;

for (i= 0 ; i<k; i++)
  {
   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )
   {
     if (OrderSymbol()== Symbol () && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
     r=OrderOpenPrice();
   }
} return (r);
}


 

MT4'te Strateji Test Cihazında bir Uzman Danışmanı test ederken bu hataların nedenleri nelerdir?


 
Alexandr Sokolov :

MT4'te Strateji Test Cihazında bir Uzman Danışmanı test ederken bu hataların nedenleri nelerdir?


İndirme geçmişi. F2.