MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 10

 
-Aleks- :
물론 제로바에서 재계산을 해서 문제가 되는건 알겠는데 어떻게 풀어야할지 감이 안오네요?

이제 03은 버그입니다.

장소는 다음과 같습니다.

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

단순 변수에 데이터를 저장합니다. 이는 지표의 첫 번째 계산 중에만 작동합니다. 그런 다음 0 막대에서 이전 막대의 데이터를 포함해야 하는 변수는 현재 막대의 데이터를 포함하지만 이전 눈금의 데이터를 포함합니다.

 
Dmitry Fedoseev :

이제 03은 버그입니다.

장소는 다음과 같습니다.

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

단순 변수에 데이터를 저장합니다. 이는 지표의 첫 번째 계산 중에만 작동합니다. 그런 다음 0 막대에서 이전 막대의 데이터를 포함해야 하는 변수는 현재 막대의 데이터를 포함하지만 이전 눈금의 데이터를 포함합니다.


네, 이해했습니다. 물론 그래픽 버퍼 없이 문제를 해결하는 방법이 궁금합니다. 리소스를 절약하기 위해, 메모리가?
 
-Aleks- :
네, 이해했습니다. 물론 그래픽 버퍼 없이 문제를 해결하는 방법이 궁금합니다. 리소스를 절약하기 위해, 메모리가?

여기에서 지표를 묵상하십시오. 여기에는 많은 정적 변수가 있습니다.

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

버퍼를 대체하기 위해 만들어졌습니다.

IndicatorCounted()=0이면 LastTime을 0으로 설정해야 합니다(다른 것은 선택 사항이지만 바람직함).

그런 다음 루프 시작 부분에서 값을 이동합니다.

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

        }
       else
        {
         cDir=pDir;
        }

"c"로 시작하는 변수는 현재 값이고 "p"로 시작하는 변수는 이전 값입니다.

 
안녕하세요. 코드를 알아낼 수 있도록 도와주세요. 사용 가능한 거래 내역을 파일에 쓰는 스크립트를 작성하려고 합니다. 그러나 분명히 코드에 문제가 있습니다. 스크립트 실행의 결과 파일에 두 줄만 기록되기 때문입니다. 대문자 한 줄(코드 참조)과 기록에서 가장 오래된 거래의 데이터입니다. 무슨 일인지 이해가 안 돼요. 혼자서는 도저히 해결이 안되네요 도와주세요.

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 :
안녕하세요. 코드를 알아낼 수 있도록 도와주세요. 사용 가능한 거래 내역을 파일에 쓰는 스크립트를 작성하려고 합니다. 그러나 분명히 코드에 문제가 있습니다. 스크립트 실행의 결과 파일에 두 줄만 기록되기 때문입니다. 대문자 한 줄(코드 참조)과 기록에서 가장 오래된 거래의 데이터입니다. 무슨 일인지 이해가 안 돼요. 혼자서는 도저히 해결이 안되네요 도와주세요.
Dmitry는 좋은 기사를 썼습니다.
 
Artyom Trishkin :
Dmitry는 좋은 기사를 썼습니다.
고마워, 흥미롭다, 나는 그것을 읽을 것이다. 내가 필요로하는 스크립트가 있지만 여전히 작동하지 않습니다. mql5가 있고 mql4가 있습니다. 컴파일러는 많은 오류를 제공합니다. 분명히 익숙하지 않은 단어가 많이 있습니다.
 
kosmo13 :
고마워, 흥미롭다, 나는 그것을 읽을 것이다. 내가 필요로하는 스크립트가 있지만 여전히 작동하지 않습니다. mql5가 있고 mql4가 있습니다. 컴파일러는 많은 오류를 제공합니다. 분명히 익숙하지 않은 단어가 많이 있습니다.
어떤 종류의 스크립트입니다. 봅시다.
 

안녕하세요. 경고 후 표시기에서 api.binaryteam.ru로 보내야 합니다. 경고 후 http://api.binaryteam.ru와 같은 줄이 api.binaryteam.ru 주소 http://api.binaryteam.ru/?request=로 보내지도록 indicator.mq4 파일에 추가해야 하는 줄은 무엇입니까? signal&key=12345472300af900f431234561234567&formname=risefall&type_account=demo&symbol=frxUSDCHF&duration=5m&amount=3&bet= CALL&source=metatrader.

WebRequest 를 통해 조언자에게 http://binaryteam.ru/addons/#api http://binaryteam.ru/files/mt4example_1.zip 을 보내는 예가 있습니다. Indicator.mq4 파일에 라인을 추가 할 때

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);

}
  

2016.11.16 13:50:01.783 WebRequest에 오류를 씁니다. 오류 코드 = 4060

WebRequest 기능 없이 요청을 전달하는 방법은 무엇입니까? WebRequest와 유사한 다른 기능이 있습니까? .mq4 표시기 파일에 추가할 수 있도록

 
Artyom Trishkin :
어떤 종류의 스크립트입니다. 봅시다.

해당 기사의 부록에서는 sHistoryExport.mq5라고 합니다. 내 컴파일러는 이름이 "HistoryDeal.."로 시작하고 식별자가 "DEAL_.."로 시작하는 함수를 허용하지 않습니다. 코드는 다음과 같습니다.

#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);  
  
}
//+------------------------------------------------------------------+
 
표시기 경고가 왔는지 조언자로부터 어떻게 결정합니까?