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

 
-Aleks- :
Tabii ki, sorunun sıfır çubuğundaki yeniden hesaplamadan kaynaklandığını anlıyorum, ancak bunu nasıl çözeceğimi bulamıyorum?

Şimdi 03 buggy.

İşte yer:

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;

Verileri basit değişkenlerde saklayın - bu yalnızca göstergenin ilk hesaplanması sırasında çalışır. Ardından, sıfır çubuğunda, önceki çubuktan veri içermesi gereken değişken, geçerli çubuktan, ancak önceki onay işaretinden veri içerecektir.

 
Dmitry Fedoseev :

Şimdi 03 buggy.

İşte yer:

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;

Verileri basit değişkenlerde saklayın - bu yalnızca göstergenin ilk hesaplanması sırasında çalışır. Ardından, sıfır çubuğunda, önceki çubuktan veri içermesi gereken değişken, geçerli çubuktan, ancak önceki onay işaretinden veri içerecektir.


Evet, bunu anladım, elbette, sorunu grafik arabelleği olmadan nasıl çözeceğimi merak ediyorum - kaynakları kurtarmak için - bellek?
 
-Aleks- :
Evet, bunu anladım, elbette, sorunu grafik arabelleği olmadan nasıl çözeceğimi merak ediyorum - kaynakları kurtarmak için - bellek?

Burada bu gösterge üzerinde meditasyon yapın. Bir sürü statik değişkene sahiptir:

   static datetime LastTime= 0 ;
   static int cDir= 0 ;
   static int pDir= 0 ;

Tamponları değiştirmek için yapılırlar.

IndicatorCounted()=0 ise, LastTime sıfıra ayarlanmalıdır (diğerleri isteğe bağlıdır, ancak istenir).

Ardından, döngünün başında değerleri taşıyın:

if ( Time [i]>LastTime)
        {
         LastTime= Time [i];
         pDir=cDir;

        }
       else
        {
         cDir=pDir;
        }

"c" ile başlayan değişkenler mevcut değerdir ve "p" ile başlayanlar bir önceki değerdir.

 
Merhaba. Lütfen kodu çözmeme yardım et. Mevcut ticaret geçmişini bir dosyaya yazacak bir komut dosyası yazmaya çalışıyorum. Ancak görünüşe göre kodda bir sorun var, çünkü komut dosyasının yürütülmesinin bir sonucu olarak dosyaya yalnızca iki satır kaydedilir: büyük harf (kodda bakın) ve tarihteki en eski anlaşmanın verileri. Sorunun ne olduğunu anlamıyorum. Kendi başıma çözemedim lütfen yardım edin.

string MyFileName= "History_Of_Trades.csv" ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//создаем файл и записываем в него заглавную строку
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн


   int file_handle= FileOpen (MyFileName, FILE_WRITE , " " );
   string mytext= "Магик;Номер ордера;Время открытия;Время закрытия;Объем;Символ;Цена открытия;Цена закрытия;Своп;Прибыль" ;
   FileWrite (file_handle, mytext);
   FileClose (file_handle); 


//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
//записываем в файл данные по закрытым позициям
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
  
   for ( int n= 1 ; n<= OrdersTotal (); n++) {
     if ( OrderSelect (n- 1 , SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
          
          mytext= OrderMagicNumber ()+ ";"
                 + OrderTicket ()+ ";"
                 + TimeToString ( OrderOpenTime (), TIME_DATE | TIME_MINUTES )+ ";"
                 + TimeToString ( OrderCloseTime (), TIME_DATE | TIME_MINUTES )+ ";"
                 + DoubleToString ( OrderLots (), 2 )+ ";"
                 + Symbol ()+ ";"
                 + DoubleToString ( OrderOpenPrice (), Digits )+ ";"
                 + DoubleToString ( OrderClosePrice (), Digits )+ ";"
                 + DoubleToString ( OrderSwap (), 2 )+ ";"
                 + DoubleToString ( OrderProfit (), 2 );
                
       file_handle= FileOpen (MyFileName, FILE_READ | FILE_WRITE , " " );
       FileSeek (file_handle, 0 , SEEK_END );
       FileWrite (file_handle, mytext);
       FileClose (file_handle);
       }}}}
 
kosmo13 :
Merhaba. Lütfen kodu çözmeme yardım et. Mevcut ticaret geçmişini bir dosyaya yazacak bir komut dosyası yazmaya çalışıyorum. Ancak görünüşe göre kodda bir sorun var, çünkü komut dosyasının yürütülmesinin bir sonucu olarak dosyaya yalnızca iki satır kaydedilir: büyük harf (kodda bakın) ve tarihteki en eski anlaşmanın verileri. Sorunun ne olduğunu anlamıyorum. Kendi başıma çözemedim lütfen yardım edin.
Dmitry iyi bir makale yazdı.
 
Artyom Trishkin :
Dmitry iyi bir makale yazdı.
Teşekkürler, ilginç, okuyacağım. tam ihtiyacım olan bir komut dosyası var, ama yine de benim için çalışmıyor, mql5 var ve bende mql4 var, derleyici bir sürü hata veriyor, görünüşe göre bunun için pek çok yabancı kelime var :(
 
kosmo13 :
Teşekkürler, ilginç, okuyacağım. tam ihtiyacım olan bir komut dosyası var, ama yine de benim için çalışmıyor, mql5 var ve bende mql4 var, derleyici bir sürü hata veriyor, görünüşe göre bunun için pek çok yabancı kelime var :(
Ne tür bir senaryo. Bakalım.
 

Merhaba. Uyarıdan sonra göstergeden api.binaryteam.ru adresine göndermeniz gerekiyor. Uyarıdan sonra http://api.binaryteam.ru gibi bir satırın api.binaryteam.ru adresine http://api.binaryteam.ru/?request= gönderilmesi için gösterge.mq4 dosyasına hangi satırlar eklenmelidir? sinyal&key=12345472300af900f431234561234567&formname=yükseliş&type_account=demo&symbol=frxUSDCHF&duration=5 milyon&amount=3&bet= ÇAĞRI&kaynak=metatrader.

Danışmanlar için http://binaryteam.ru/addons/#api http://binaryteam.ru/files/mt4example_1.zip WebRequest yoluyla gönderme örneği vardır. Gösterge.mq4 dosyasına satır eklerken

extern  string url="http://api.binaryteam.ru/";

extern  double  bet=1;

extern int expiration=1;

extern string key = "12345472300af900f431234561234567" ;

extern string type_account = "demo";

extern bool Flag = false;

extern string bettype;

.....
int start() {

....

условие покупки {

.....

Alert("алерт индюка  -  BUY!!!");

bettype = "CALL";

      Print("направление ставки: ",bettype);

      Flag = true;

Print(BinaryTeam());

  }

условие продажи {

.....  

Alert(""алерт индюка  -   SELL!!!");

bettype = "PUT";

      Print("направление ставки: ",bettype);

      Flag = true;

Print(BinaryTeam());

  }

  }

bool BinaryTeam()

{

   char post[],result[];

   int res;

      string headers;

    //--- для работы с сервером необходимо добавить URL

   //--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):

      string formname = "risefall";

   string symbol = "frx" + Symbol();

   string duration = IntegerToString(expiration) + "m";

   string amount = DoubleToString(bet);

  if(Flag==false)

   {

      Print("не задано направление торговли");

      return(false);

   }

  

   //--- пример: http://api.binaryteam.ru/?request=signal&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet=CALL&source=metatrader

  

   //--- собираем строку для отправки

   string send = "?request=signal" +

         "&source=metatrader" +

         "&type_account=" + type_account +

         "&bet=" + bettype +

         "&formname=" + formname +

"&date_start=now" +

         "&symbol=" + symbol +

         "&duration=" + duration +

         "&barrier=0" +

         "&amount=" + amount +

         "&key=" + key;

  

   Print(send);

  

   ResetLastError();



   int timeout=5000;

   res = WebRequest("GET",url+send,NULL,NULL,timeout,post,0,result,headers);

   if(res==-1)

     {

      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());

      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);

     }

   else

     {

      Print(CharArrayToString(result));

      return(true);

     }

   Print("Непредвиденная ситуация");

   return(false);

}
  

WebRequest'te 2016.11.16 13:50:01.783 hatası yazıyor. Hata kodu =4060

WebRequest işlevi olmadan istek nasıl iletilir? WebRequest'e benzer başka işlevler var mı? .mq4 gösterge dosyasına eklenebilmesi için

 
Artyom Trishkin :
Ne tür bir senaryo. Bakalım.

Bu makalenin ekinde, sHistoryExport.mq5 olarak adlandırılır. Derleyicim, adları "HistoryDeal.." ile başlayan ve tanımlayıcıları "DEAL_.." ile başlayan işlevleri kabul etmiyor. İşte kod:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"

#property script_show_inputs

input bool      UseDateFrom = false ; // Указывать дату начала
input datetime DateFrom= 0 ; // Дата начала
input bool      UseDateTo= false ; // Указывать дату окончания
input datetime DateTo= 0 ; // Дата окончания



//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart (){

   datetime from,to;
  
   if (UseDateFrom){
      from=DateFrom;
   }
   else {
      from= 0 ;
   }
  
   if (UseDateTo){
      to=DateTo;
   }
   else {
      to= TimeCurrent ();
   }  
  
   if (! HistorySelect (from,to)){
       Alert ( "Ошибка выделение истории" );
       return ;
   }
  
   string FileName= "history.csv" ;
  
   int h= FileOpen (FileName, FILE_WRITE | FILE_ANSI | FILE_CSV , ";" );
  
   if (h== INVALID_HANDLE ){
       Alert ( "Ошибка открытия файла" );
       return ;
   }
  
   // первая строка, что бы знать, где что находится
  
   FileWrite (h, "Time" , "Deal" , "Order" , "Symbol" , "Type" , "Direction" , "Volume" , "Price" , "Comission" , "Swap" , "Profit" , "Comment" );    
   // по всем сделкам

   for ( int i= 0 ;i< HistoryDealsTotal ();i++){
       ulong ticket= HistoryDealGetTicket (i);
       if (ticket!= 0 ){
        
         long type= HistoryDealGetInteger (ticket, DEAL_TYPE );
        
         if (type== DEAL_TYPE_BUY || type== DEAL_TYPE_SELL ){
      
             long entry= HistoryDealGetInteger (ticket, DEAL_ENTRY );
      
             FileWrite (h,( datetime ) HistoryDealGetInteger (ticket, DEAL_TIME ),
                        ticket,
                         HistoryDealGetInteger (ticket, DEAL_ORDER ),
                         HistoryDealGetString (ticket, DEAL_SYMBOL ),
                        (type== DEAL_TYPE_BUY ? "buy" : "sell" ),
                        (entry== DEAL_ENTRY_IN ? "in" :(entry== DEAL_ENTRY_OUT ? "out" : "in/out" )),
                         DoubleToString ( HistoryDealGetDouble (ticket, DEAL_VOLUME ), 2 ),
                         HistoryDealGetDouble (ticket, DEAL_PRICE ),
                         DoubleToString ( HistoryDealGetDouble (ticket, DEAL_COMMISSION ), 2 ),
                         DoubleToString ( HistoryDealGetDouble (ticket, DEAL_SWAP ), 2 ),
                         DoubleToString ( HistoryDealGetDouble (ticket, DEAL_PROFIT ), 2 ),
                         HistoryDealGetString (ticket, DEAL_COMMENT )                    
            );
         }
      }
       else {
         Alert ( "Ошибка выделения сделки, повторите попытку" );
         FileClose (h);
         return ;
      }
   }

   FileClose (h);

   Alert ( "Сохранение выполнено, см. файл " +FileName);  
  
}
//+------------------------------------------------------------------+
 
Danışmandan gösterge uyarısının geldiği nasıl belirlenir?
Neden: