[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 59

 
xrust писал(а) >>
Ayrıntılı raporun adını normal bir raporla değiştirebilirsiniz ve mutlu olacaksınız.

Söyleyin zor değilse bu ismi tam olarak nerede değiştirebilirim? Kullanım kılavuzu bu konuda hiçbir şey söylemiyor.

 
Uh .. kafamı karıştırıyorsun .... dosyaların adını hiç değiştirdin mi ???
 
Sevgili uzmanlar, lütfen sorumu görmezden gelmeyin.

Günlük gibi oynaklığı hesaplayan bir gösterge var mı? Ancak belirsiz bir sayı 0.34 gibi bir sonuç verecek şekilde değil. Ve böylece bir günde mum tik tak sayısını sayar ve örneğin belirli bir periyoda (gün sayısı) böler, böylece ortalama değeri bilebilirsiniz. Örnek: 100'ü açın, 200'ü kapatın; ikinci gün - 200'ü açın, 250'yi kapatın. Bu 2 gün için ortalama oynaklık = ((200-100)+(250-200))/2gün=(100+50)/2=75
Varsa nereden indirilir.
 
xrust писал(а) >>
Uh .. kafamı karıştırıyorsun .... dosyaların adını hiç değiştirdin mi ???

Terminalin belirli bir zaman aralığından sonra, örneğin her 20 dakikada bir otomatik olarak bir rapor oluşturduğu ve bunu FTP sunucusuna yüklediği varsayılır. Raporun sitede daha fazla görüntülenmesi için FTP sunucusu barındırıcısı. Bu varsayılan terminal özelliği, düzenli bir raporu kaydederken, ek bilgiler ve bir grafikle birlikte ayrıntılı bir rapor istenir. Manuel olarak, ayrıntılı olanı sorunsuz bir şekilde kaydedebilir ve ihtiyacınız olan geçmiş dönemini seçebilirsiniz.

Ve ilk başta beni şaşırttın - otomatik işlevin çalışmasını düzenlemek için neyi ve nerede manuel olarak yeniden adlandırmalıyım? Hiç net değil.

 

https://forum.mql4.com/en/10422 adresinden gelen yazının tekrarı, sorunuzu buradan sormanız belki daha uygun olur.


İşte kodun example.ini'den gelen kısmı:

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


çiftlerin sayısını okur ve ardından tek tek çiftlerin adlarını dize dizisinde saklar:

#include <IniFiles.mqh>

extern string config_path = "C:\Program Files\MetaTrader - MetaQuotes\experts\example.ini";

string CrossName[];
int numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
string sectionName = "common";

numCross = ReadIniInteger(config_path, sectionName, "numCross", 0);
ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = ReadIniString(config_path, sectionName, "name", "-");
Print("init.1: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.1: read complete");

for (i=0; i<numCross; i++)
{
Print("init.2: CrossName[", (i+1), "]=", CrossName[i]);
}


Print("-------------------------------");
for (i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = StringSubstr(ReadIniString(config_path, sectionName, "name", "-"), 0, 0);
Print("init.3: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.3: read complete");

for (i=0; i<numCross; i++)
{
Print("init.4: CrossName[", (i+1), "]=", CrossName[i]);
}

return(0);
}


her şey basit görünüyor ve ini'yi okuduktan sonra bir dizi çift adı almalıyız.

Ancak sonuç olarak, parametrenin bir sonraki ini okumasından ve değerin dizinin sonraki öğesine atanmasından sonra,

önceden atanmış diğer tüm öğeler aynı değeri alır.

2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: -------------------------------
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[2]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[1]=USDJPY

2009.04.09 02:17:06 example GBPUSD,H4: init.1: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[1]=EURUSD

Bir değişkene bir dizi dizisi atarken, atamanın gerçekten gerçekleştiği ortaya çıktı.

referanslar, değerler değil. Mevcut tüm belgelere ve foruma baktım, ancak bunun neden böyle olduğuna dair bir cevap bulamadım.

StringSubstr kullanarak çıkış yolunu buldum, ancak bir şey bana bunun tam olarak doğru olmadığını söylüyor.


Bilenler için soru: diğer değişkenlerin değerlerini bir dizi dizenin öğelerine doğru şekilde nasıl atayabiliriz?

 
Yug >> :

https://forum.mql4.com/en/10422 adresinden gelen yazının tekrarı, sorunuzu buradan sormanız belki daha uygun olur.


Hatırladı! Dizelerin uygulanmasının özellikleri. Diziyi yeniden boyutlandırdıktan sonra, üzerinden geçmeniz ve sıfıra sıfırlamanız gerekir:

 ArrayResize ( CrossName , numCross ) ;

for ( int i = 0 ; i < numCross ; i + + )
{
   CrossName [ i ] = "" ;
}
Yanılıyor olabilirim ama yardımı olmalı.
 
XinoXano писал(а) >>

Terminalin belirli bir zaman aralığından sonra, örneğin her 20 dakikada bir otomatik olarak bir rapor oluşturduğu ve bunu FTP sunucusuna yüklediği varsayılır. Raporun sitede daha fazla görüntülenmesi için FTP sunucusu barındırıcısı. Bu varsayılan terminal özelliği, düzenli bir raporu kaydederken, ek bilgiler ve bir grafikle birlikte ayrıntılı bir rapor istenir. Manuel olarak, ayrıntılı olanı sorunsuz bir şekilde kaydedebilir ve ihtiyacınız olan geçmiş dönemini seçebilirsiniz.

Ve ilk başta beni şaşırttın - otomatik işlevin çalışmasını düzenlemek için neyi ve nerede manuel olarak yeniden adlandırmalıyım? Hiç net değil.

Rapor şablonları deyim.htm ve ayrıntılı rapor StatementDetailed.htm , terminal\templates\ klasöründe bulunur. Varsayılan olarak, terminal normal bir rapor deyimi.htm gönderir, ancak ayrıntılı bir StatementDetailed.htm gerekir, Windows ortamında StatementDetailed.htm dosyasını deyim.htm olarak yeniden adlandırmanızı Rusça olarak önerdim . Veya yeniden adlandırma talimatlarını da mı yazıyorsunuz?

 

Sevgili uzmanlar,

lütfen kilitlenen anlaşmalarla başa çıkmama yardım edin

ayrıntılar ve buradaki kod: 'KİLİTLENEN konumla başa çıkmama yardım et'

her zaman saygıyla

 
xrust писал(а) >>

Rapor şablonları deyim.htm ve ayrıntılı rapor StatementDetailed.htm , terminal\templates\ klasöründe bulunur. Varsayılan olarak, terminal normal bir rapor deyimi.htm gönderir, ancak ayrıntılı bir StatementDetailed.htm gerekir, Windows ortamında StatementDetailed.htm dosyasını deyim.htm olarak yeniden adlandırmanızı Rusça olarak önerdim . Veya yeniden adlandırma talimatlarını da mı yazıyorsunuz?

Hayır, kendim yeniden adlandırabilirim, ancak bir şablonu diğeriyle değiştirmek hiç aklıma gelmedi ...

Çok teşekkürler! Şimdi her şey açık ve her şey çalışıyor!!!

 
Everlost >> :

Çok basit - bir Cls_S veya Cls_B sinyali geldiğinde, en son açılan pozisyonu unutuyoruz (Last_Position değişkeninin değerini tekrar -1'e sıfırlıyoruz).

if ((Cls_S==true || Cls_B==true) && Last_Position>=0) Last_Position=-1;

teorik olarak anlaşılabilir. sadece bir nedenden dolayı uzman artık anlaşma yapmayı tamamen bıraktı ((

Şimdi buna sahibim:

 //Учет ордеров истории
int ORDtime = 0 ;
double ORDprofit = 0.01 ;
int ORDtype = - 1 ;
for ( int j = OrdersHistoryTotal ( ) - 1 ; j > = 0 ; j - - ) 
{
   if ( OrderSelect ( j , SELECT_BY_POS , MODE_HISTORY ) ) 
   {
     if ( OrderSymbol ( ) = = Symbol ( ) ) 
     {
       if ( OrderCloseTime ( ) ! = 0 & & OrderCloseTime ( ) > ORDtime ) 
       {
        ORDtime = OrderCloseTime ( ) ;
        ORDtype = OrderType ( ) ;
        ORDprofit = OrderProfit ( ) ;
       }
     }
   }
}
. . .
//Торговые критерии на открытие и экстренное закрытие ордеров
if ( ( ORDtype = = - 1 ) & & ( . . . ) )
   {
    Opn_B = true ;
   }
if ( ( ORDtype = = - 1 ) & & ( . . . ) )     
   {
    Cls_B = true ;
   }
if ( . . . )
   {
    Opn_S = true ;
   }
if ( . . . )     
   {
   Cls_S = true ;
   }
// Дополнительные условия к открытию
if ( ( Cls_B = = true | | Cls_S = = true ) & & ( ORDtype > = 0 ) ) ORDtype = - 1 ;        //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


bir hata mı var
Neden: