+ Îòâåòèòü â òåìå
Ñòðàíèöà 1 èç 4 1 2 3 4 ÏîñëåäíÿÿÏîñëåäíÿÿ
Ïîêàçàíî ñ 1 ïî 10 èç 33

Òåìà: Êàê ïîëó÷èòü îáúåìû èç èíäèêàòîðà Ïðåìèóì â ñâîé ðîáîò.

  1. #1
    ClusterDelta.com Team
    Ðåãèñòðàöèÿ
    27.10.2011
    Ñîîáùåíèé
    4,256
    Ñêàçàë(à) ñïàñèáî
    473
    Ïîáëàãîäàðèëè 2,157 ðàç(à) â 1,128 ñîîáùåíèÿõ

    Êàê ïîëó÷èòü îáúåìû èç èíäèêàòîðà Ïðåìèóì â ñâîé ðîáîò.

    Êîëëåãè,

    î÷åíü ÷àñòî ïîÿâëÿþòñÿ âîïðîñû î òîì, êàê ïîëó÷èòü äàííûå èç èíäèêàòîðà Ïðåìèóì â ðîáîò.

    Ó÷èòûâàÿ, ÷òî èíäèêàòîð Ïðåìèóì ðàáîòàåò â àñèíõðîííîì ðåæèìå, òî èñïîëüçîâàíèå iCustom íå ïðèâîäèò ê óñïåõó. ß ñäåëàë íåáîëüøîé íàáðîñîê òîãî, êàê Âû ìîæåòå ïîëó÷àòü îáúåìû â ðîáîò.
    Âàì íóæíî ïåðåíåñòè ýòó ÷àñòü êîäà â ñâîé ñîâåòíèê

    (Eng: there are too many questions regarding to how to get volumes to the expert from Premium indicators. Premium use asynchronous calls so using iCustom may be failed. Here small example how you can get volumes for your expert. You should implement to your expert)


    Êîä:
    #property strict
    
    //+------------------------INCLUDE-----------------------------------+
    #include <stdlib.mqh>
    
    //+--------------- CLUSTERDELTA VOLUMEN DATA --------------------------+
    #import "premium_mt4_v4x1.dll"
    int InitDLL(int &);
    string Receive_Information(int &, string);
    int Send_Query(int &, string, string, int, string, string, string, string, string, string, int, string, string, string,int);
    #import
    
    datetime TIME_Array[]; // Array for TIME
    double VOLUME_Array[]; // Array of Volumes, indexes of array are corelated to TIME_ARRAY
    double DELTA_Array[]; // Array of Deltas, indexes of array are corelated to TIME_ARRAY
    datetime last_loaded=0;
    string indicator_client;
    bool ReverseChart_SET=false; // not used in expert
    int Seconds_Interval_To_Update_Volumes=10;
    
    bool VOLUMES_INIT=false;
    
    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //---
    
       int INIT_DLL_result;
       InitDLL(INIT_DLL_result); // in the next version you dont have use this function
       if(INIT_DLL_result==-1) { Print("Error during load Volumes DLL") ; return INIT_FAILED; }
    
       // DO NOT CHANGE THIS CODE & DATA
       do
       {
         indicator_client = "CDPA" + StringSubstr(DoubleToString(TimeLocal(),0),7,3)+""+DoubleToStr(MathAbs((MathRand()+3)%10),0);     
       } while (GlobalVariableCheck(indicator_client));
       GlobalVariableTemp(indicator_client);
       // =====================
       
       EventSetTimer(1);
       return(INIT_SUCCEEDED);
      }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
    //---
       GlobalVariableDel(indicator_client);
      }
    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    void OnTick()
    {
    
    }
    //+------------------------------------------------------------------+
    
    //+------------------------------------------------------------------+
    //| Expert time function                                             |
    //+------------------------------------------------------------------+
    void OnTimer()
    {
       // DO NOT FORGET TO USE EventSetTimer(1); in Init
       // IF YOU DO NOT LIKE USE onTimer() YUO SHOULD MOVE THIS CODE TO onTick()
    
       static int Load_Frequency=0;
       // do not update faster than one time per 5 seconds
       if(Seconds_Interval_To_Update_Volumes<5) { Seconds_Interval_To_Update_Volumes=5; } 
       
       VOLUMES_GetData();
       if (Load_Frequency % Seconds_Interval_To_Update_Volumes == 0) 
       { 
          Load_Frequency=0;
          VOLUMES_SetData();
       }
       Load_Frequency++;
       if (VOLUMES_INIT) { Print (Time[0]," ",VOLUME_by_index(0));  } // <-- for testing purposes
      // VOLUMES_INIT is a signal that we have first package of volumes
    } 
    
        
    int ArrayBsearchCorrect(datetime &array[], double value, 
                            int count = WHOLE_ARRAY, int start = 0, 
                            int direction = MODE_ASCEND)
    {
       if(ArraySize(array)==0) return(-1);   
       int i = ArrayBsearch(array, (datetime)value, count, start, direction);
       if (value != array[i])
       {
          i = -1;
       }
       return (i);
    }
    
    void SortDictionary(datetime &keys[], double &values[], double &values2[], 
                        int sortDirection = MODE_ASCEND)
    {
       datetime keyCopy[];
       double valueCopy[];
       double valueCopy2[];   
       ArrayCopy(keyCopy, keys);
       ArrayCopy(valueCopy, values);
       ArrayCopy(valueCopy2, values2);   
       ArraySort(keys, WHOLE_ARRAY, 0, sortDirection);
       for (int i = 0; i < MathMin(ArraySize(keys), ArraySize(values)); i++)
       {
          values[ArrayBsearch(keys, keyCopy[i])] = valueCopy[i];
          values2[ArrayBsearch(keys, keyCopy[i])] = valueCopy2[i];      
       }
    }
    
        
    int VOLUMES_SetData()
    {
    
      int k=0,i;
      
      string ExtraData="AUTO";
      string MetaTrader_GMT="AUTO";
      string ver="4.0";
      int Days_in_History=1;
      datetime Custom_Start_time=D'2017.01.01 00:00';
      datetime Custom_End_time=D'2017.01.01 00:00';
      
      i = Send_Query(k,indicator_client, Symbol(), Period(), TimeToStr(TimeCurrent()), TimeToStr(Time[0]), ExtraData, TimeToStr(last_loaded),MetaTrader_GMT,ver,Days_in_History,TimeToStr(Custom_Start_time),TimeToStr(Custom_End_time),AccountCompany(),AccountNumber());
    
      if (i < 0) { Alert ("Error during query registration"); return -1; }
      return 1;
    }  
    
    int VOLUMES_GetData()
    {
    
       string response="";
       int length=0;
       int valid=0;   
       int len=0,td_index;
       int i=0;
       double index;   
       int iBase=0;
       double ask_value=0, bid_value=0;
       string result[];
       string bardata[];
       string MessageFromServer;
       
       // get query from dLL
       response = Receive_Information(length, indicator_client);
       if (length==0) { return 0; }
    
        if(StringLen(response)>1) 
        {
          len=StringSplit(response,StringGetCharacter("\n",0),result);                
          if(!len) { return 0; }
          MessageFromServer=result[0];
          
          for(i=1;i<len;i++)
          {
            if(StringLen(result[i])==0) continue;
            StringSplit(result[i],StringGetCharacter(";",0),bardata);                
            td_index=ArraySize(TIME_Array);
            index = (double)StrToTime(bardata[0]);
            ask_value= StringToDouble(bardata[1]);
            bid_value= StringToDouble(bardata[2])*(ReverseChart_SET?-1:1);        
    
            
            if(index==0) continue;
            iBase = ArrayBsearchCorrect(TIME_Array, index ); 
            if (iBase >= 0) { td_index=iBase; } 
            if(td_index>=ArraySize(TIME_Array))
            {
               ArrayResize(TIME_Array, td_index+1);
               ArrayResize(VOLUME_Array, td_index+1);
               ArrayResize(DELTA_Array, td_index+1);           
            } 
            else { if((VOLUME_Array[td_index])>(ask_value) && td_index>=ArraySize(TIME_Array)-2) { ask_value=VOLUME_Array[td_index]; bid_value=DELTA_Array[td_index];}  }
        
            TIME_Array[td_index] = (datetime)index;
            VOLUME_Array[td_index] = ask_value;
            DELTA_Array[td_index] = bid_value;        
          
          }
          valid=ArraySize(TIME_Array);
          
          if (valid>0)
          {
           SortDictionary(TIME_Array,VOLUME_Array,DELTA_Array);
           int lastindex = ArraySize(TIME_Array);
           last_loaded=TIME_Array[lastindex-1];  
           if(last_loaded>Time[0])last_loaded=Time[0];        
           VOLUMES_INIT=true;
          } 
    
        }
        return (1);
    }
    
    
    int VOLUME_by_index(int ix, bool BrokehHour=true)
    {
          if(ArraySize(TIME_Array)<2) return 0;
          if(ArraySize(Time)<=ix) return 0;
          
          int iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] ); 
    
          if (iBase < 0 && Period() >= PERIOD_M5 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 1*60 ); } // 1 Min BrokenHour
          if (iBase < 0 && Period() >= PERIOD_M5 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 2*60 ); } // 1 Min BrokenHour      
          if (iBase < 0 && Period() >= PERIOD_M5 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 3*60 ); } // 1 Min BrokenHour            
          if (iBase < 0 && Period() >= PERIOD_M5 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 4*60 ); } // 1 Min BrokenHour                  
          if (iBase < 0 && Period() >= PERIOD_M15 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 5*60 ); } // 5 Min BrokenHour      
          if (iBase < 0 && Period() >= PERIOD_H1 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 30*60 ); } // 35 Min BrokenHour / ES      
          if (iBase < 0 && Period() >= PERIOD_H1 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 35*60 ); } // 35 Min BrokenHour / ES
          if (iBase < 0 && Period() >= PERIOD_H4 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 60*60 ); } // 60 Min BrokenHour / ES      
          if (iBase < 0 && Period() >= PERIOD_H4 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] + 60*60 ); } // 60 Min BrokenHour / ES            
          if (iBase < 0 && Period() >= PERIOD_H4 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] + 2*60*60 ); } // 120 Min BrokenHour / ES            
          if (iBase < 0 && Period() >= PERIOD_W1 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] + 24*60*60); } // 35 Min BrokenHour / ES      
          
          
          if (iBase >= 0)
          {
             return (int)VOLUME_Array[iBase];
          }
             
          return 0;
    }

  2. #2
    ClusterDelta.com Team
    Ðåãèñòðàöèÿ
    27.10.2011
    Ñîîáùåíèé
    4,256
    Ñêàçàë(à) ñïàñèáî
    473
    Ïîáëàãîäàðèëè 2,157 ðàç(à) â 1,128 ñîîáùåíèÿõ
    Ôàêòè÷åñêè çà ïîëó÷åíèå îáúåìîâ îòâå÷àåò ýòîò êóñîê êîäà:
    Êîä:
    void OnTimer()
    {
       static int Load_Frequency=0;
       if(Seconds_Interval_To_Update_Volumes<5) { Seconds_Interval_To_Update_Volumes=5; } 
       
       VOLUMES_GetData();
       if (Load_Frequency % Seconds_Interval_To_Update_Volumes == 0) 
       { 
          Load_Frequency=0;
          VOLUMES_SetData();
       }
       Load_Frequency++;
    }
    Ôóíêöèÿ Volumes_SetData() ÷åðåç êàæäûé èíòåðâàë, çàäàííûé â ïàðàìåòðå Seconds_Interval_To_Update_Volumes â ñåêóíäàõ äàåò çàïðîñ íà DLL íà ïîëó÷åíèå äàííûõ ïî òåêóùåìó èíñòðóìåíòó.

    Volume_GetData ïîñòîÿííî îïðàøèâàåò DLL íà ïðåäìåò òîãî, áûëè ëè óæå ïîëó÷åíû äàííûå ïî ïðîøëîìó çàïðîñó. Ïîêà äàííûå íå ïîëó÷åíû, âñå ïîñëåäóþùèå çàïðîñû áóäóò èãíîðèðîâàòüñÿ âíóòðè DLL.
    Ïîñëå ïîëó÷åíèÿ ïåðâîãî íàáîðà äàííûõ ïåðåìåííàÿ VOLUMES_INIT ñòàíîâèòñÿ true

    Åñëè Âàì íóæíî ïðîòåñòèðîâàòü òîëüêî èñòîðèþ, òî äîñòàòî÷íî ñäåëàòü SetData è ïåðèîäè÷åñêè âûçûâàòü GetData ïîêà, VOLUMES_INIT íå ñòàíåò true.
    Ëó÷øå âñåãî ýòî äåëàòü ãäå-òî â onTick(),

    if(!VOLUMES_INIT) { VOLUMES_GetData(); }
    else
    {
    àíàëèç îáúåìîâ

    }

    ÿ ñðàçó õî÷ó îòìåòèòü, ÷òî êîíñòðóêöèÿ while(!VOLUMES_INIT) { VOLUMES_GetData(); } - ìîæåò ïðèâåñòè òåðìèíàë â íåèçâåñòíîå ñîñòîÿíèå. Íàäî òåñòèðîâàòü.

  3. #3
    Ïîëüçîâàòåëü
    Ðåãèñòðàöèÿ
    06.06.2017
    Ñîîáùåíèé
    2
    Ñêàçàë(à) ñïàñèáî
    0
    Ïîáëàãîäàðèëè 1 ðàç â 1 ñîîáùåíèè
    Ïîäñêàæèòå òàêèì îáðàçîì äàííûå îáúåìà ìîæíî ïîëó÷èòü òîëüêî èç èíäèêàòîðà Ïðåìèóì? Èëè àíàëîãè÷íûì îáðàçîì îáúåìû ìîæíî ïîëó÷èòü èç èíäèêàòîðà Ñòàíäàðò?

  4. #4
    ClusterDelta.com Team
    Ðåãèñòðàöèÿ
    27.10.2011
    Ñîîáùåíèé
    4,256
    Ñêàçàë(à) ñïàñèáî
    473
    Ïîáëàãîäàðèëè 2,157 ðàç(à) â 1,128 ñîîáùåíèÿõ
    Öèòàòà Ñîîáùåíèå îò Rusmag Ïîñìîòðåòü ñîîáùåíèå
    Ïîäñêàæèòå òàêèì îáðàçîì äàííûå îáúåìà ìîæíî ïîëó÷èòü òîëüêî èç èíäèêàòîðà Ïðåìèóì? Èëè àíàëîãè÷íûì îáðàçîì îáúåìû ìîæíî ïîëó÷èòü èç èíäèêàòîðà Ñòàíäàðò?
    ß ñêîðî äîáàâëþ äëÿ èíäèêàòîðà Ñòàíäàðò èíäèêàòîðû ñ ïîäêëþ÷åíèåì DLL

    Äëÿ èíäèêàòîðîâ ñòàíäàðò ìîæíî ïîëüçîâàòüñÿ áàçîâûì iCustom

  5. #5
    daolien@mail.ru
    Ãîñòü
    Ïîäñêàæèòå, ìîæíî ëè ïîëó÷èòü èñòîðè÷åñêèå äàííûå ïî êîíêðåòíîìó áàðó ñ ClusterDelta Premium Delta 4.1 ÷åðåç ñêðèïò ïîäîáíûì ìåòîäîì?

  6. #6
    ClusterDelta.com Team
    Ðåãèñòðàöèÿ
    27.10.2011
    Ñîîáùåíèé
    4,256
    Ñêàçàë(à) ñïàñèáî
    473
    Ïîáëàãîäàðèëè 2,157 ðàç(à) â 1,128 ñîîáùåíèÿõ
    Öèòàòà Ñîîáùåíèå îò daolien@mail.ru Ïîñìîòðåòü ñîîáùåíèå
    Ïîäñêàæèòå, ìîæíî ëè ïîëó÷èòü èñòîðè÷åñêèå äàííûå ïî êîíêðåòíîìó áàðó ñ ClusterDelta Premium Delta 4.1 ÷åðåç ñêðèïò ïîäîáíûì ìåòîäîì?
    Äà, äîáàâüòå ôóíêöèþ:

    Êîä:
    int DELTA_by_index(int ix, bool BrokehHour=true)
    {
          if(ArraySize(TIME_Array)<2) return 0;
          if(ArraySize(Time)<=ix) return 0;
          
          int iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] ); 
    
          if (iBase < 0 && Period() >= PERIOD_M5 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 1*60 ); } // 1 Min BrokenHour
          if (iBase < 0 && Period() >= PERIOD_M5 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 2*60 ); } // 1 Min BrokenHour      
          if (iBase < 0 && Period() >= PERIOD_M5 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 3*60 ); } // 1 Min BrokenHour            
          if (iBase < 0 && Period() >= PERIOD_M5 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 4*60 ); } // 1 Min BrokenHour                  
          if (iBase < 0 && Period() >= PERIOD_M15 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 5*60 ); } // 5 Min BrokenHour      
          if (iBase < 0 && Period() >= PERIOD_H1 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 30*60 ); } // 35 Min BrokenHour / ES      
          if (iBase < 0 && Period() >= PERIOD_H1 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 35*60 ); } // 35 Min BrokenHour / ES
          if (iBase < 0 && Period() >= PERIOD_H4 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] - 60*60 ); } // 60 Min BrokenHour / ES      
          if (iBase < 0 && Period() >= PERIOD_H4 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] + 60*60 ); } // 60 Min BrokenHour / ES            
          if (iBase < 0 && Period() >= PERIOD_H4 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] + 2*60*60 ); } // 120 Min BrokenHour / ES            
          if (iBase < 0 && Period() >= PERIOD_W1 && BrokehHour) { iBase = ArrayBsearchCorrect(TIME_Array, Time[ix] + 24*60*60); } // 35 Min BrokenHour / ES      
          
          
          if (iBase >= 0)
          {
             return (int)DELTA_Array[iBase];
          }
             
          return 0;
    }

  7. #7
    daolien@mail.ru
    Ãîñòü
    Ó ìåíÿ ïðîáëåìà â òîì, ÷òî â ñêðèïòå íåëüçÿ ðåàëèçîâàòü ïîòèêîâûå ôóíêöèè, êàêèå èñïîëüçóþòñÿ â ñîâåòíèêàõ è èíäèêàòîðàõ. Ïîýòîìó ôóíêöèÿ äëÿ ïîëó÷åíèÿ äàííûõ, êîòîðàÿ äîëæíà èñïîëíÿòüñÿ ïîòèêîâî ó ìåíÿ ïðîñòî void, èñïîëíÿåòñÿ 1 ðàç ïðè ðàáîòå ñêðèïòà è âûãëÿäèò ïðîñòî âîò òàê:
    void CheckVOLUMES ()
    {
    VOLUMES_SetData();
    VOLUMES_GetData();
    if (VOLUMES_INIT) {Alert(Time[3]," ",DELTA_by_index(3));} // <-- for testing purposes
    // VOLUMES_INIT is a signal that we have first package of volumes
    }
    Êîíñòðóêöèè while, for äëÿ ïîëó÷åíèÿ äàííûõ âõîäÿò â áåñêîíå÷íóþ ïåòëþ èëè âûçûâàþò êðàø (çàâèñèò îò çàäåðæêè â 5 ñåê). VOLUMES_INIT âñåãäà âîçâðàùàåò false. Âîïðîñû: êàê äîëæíà âûãëÿäåòü ôóíêöèÿ ïîëó÷åíèÿ äàííûõ äëÿ ñêðèïòà, åñëè íåëüçÿ èñïîëüçîâàòü â íåì ïîòèêîâûå ôóíêöèè? Ãäå ïðîïèñûâàòü ïàðàìåòð ïîä ïîèñê êîíêðåòíîãî áàðà â èñòîðèè? ß ïðåäïîëîæèë, ÷òî ýòî óêàçûâàåòñÿ â ìàññèâå Time[], è âî âñåõ ôóíêöèÿõ îïèñàííûõ Âàìè ìåíÿþ Time[0] íà íóæíîå ìíå ÷èñëî, äëÿ ýêñïåðèìåíòà Time[3].

  8. #8
    daolien@mail.ru
    Ãîñòü
    Òàêæå âûçîâ ôóíêöèè èíèöèàëèçàöèè dll, êîòîðàÿ äîëæíà áûòü â OnInit (ó ìåíÿ ýòî äðóãàÿ ôóíêöèÿ) îòêðûâàåò îêíî íàñòðîåê èíäèêàòîðà ïðè ðàáîòå ñêðèïòà, â êîòîðîì íóæíî âûñòàâèòü ãàëî÷êó íà èñïîëüçîâàíèå ôóíêöèé ñ dll, ÷òî íå ñîâñåì óäîáíî.

  9. #9
    ClusterDelta.com Team
    Ðåãèñòðàöèÿ
    27.10.2011
    Ñîîáùåíèé
    4,256
    Ñêàçàë(à) ñïàñèáî
    473
    Ïîáëàãîäàðèëè 2,157 ðàç(à) â 1,128 ñîîáùåíèÿõ
    Öèòàòà Ñîîáùåíèå îò daolien@mail.ru Ïîñìîòðåòü ñîîáùåíèå
    Òàêæå âûçîâ ôóíêöèè èíèöèàëèçàöèè dll, êîòîðàÿ äîëæíà áûòü â OnInit (ó ìåíÿ ýòî äðóãàÿ ôóíêöèÿ) îòêðûâàåò îêíî íàñòðîåê èíäèêàòîðà ïðè ðàáîòå ñêðèïòà, â êîòîðîì íóæíî âûñòàâèòü ãàëî÷êó íà èñïîëüçîâàíèå ôóíêöèé ñ dll, ÷òî íå ñîâñåì óäîáíî.
    Íàñòðîéêè òåðìèíàëà - çàêëàäêà "ñîâåòíèêè", - ïîñòàâüòå òàì ãàëî÷êó ÷òîáû íå ñòàâèòü åå êàæäûé ðàç.

  10. #10
    ClusterDelta.com Team
    Ðåãèñòðàöèÿ
    27.10.2011
    Ñîîáùåíèé
    4,256
    Ñêàçàë(à) ñïàñèáî
    473
    Ïîáëàãîäàðèëè 2,157 ðàç(à) â 1,128 ñîîáùåíèÿõ
    Öèòàòà Ñîîáùåíèå îò daolien@mail.ru Ïîñìîòðåòü ñîîáùåíèå
    Ó ìåíÿ ïðîáëåìà â òîì, ÷òî â ñêðèïòå íåëüçÿ ðåàëèçîâàòü ïîòèêîâûå ôóíêöèè, êàêèå èñïîëüçóþòñÿ â ñîâåòíèêàõ è èíäèêàòîðàõ. Ïîýòîìó ôóíêöèÿ äëÿ ïîëó÷åíèÿ äàííûõ, êîòîðàÿ äîëæíà èñïîëíÿòüñÿ ïîòèêîâî ó ìåíÿ ïðîñòî void, èñïîëíÿåòñÿ 1 ðàç ïðè ðàáîòå ñêðèïòà è âûãëÿäèò ïðîñòî âîò òàê:
    void CheckVOLUMES ()
    {
    VOLUMES_SetData();
    VOLUMES_GetData();
    if (VOLUMES_INIT) {Alert(Time[3]," ",DELTA_by_index(3));} // <-- for testing purposes
    // VOLUMES_INIT is a signal that we have first package of volumes
    }
    Êîíñòðóêöèè while, for äëÿ ïîëó÷åíèÿ äàííûõ âõîäÿò â áåñêîíå÷íóþ ïåòëþ èëè âûçûâàþò êðàø (çàâèñèò îò çàäåðæêè â 5 ñåê). VOLUMES_INIT âñåãäà âîçâðàùàåò false. Âîïðîñû: êàê äîëæíà âûãëÿäåòü ôóíêöèÿ ïîëó÷åíèÿ äàííûõ äëÿ ñêðèïòà, åñëè íåëüçÿ èñïîëüçîâàòü â íåì ïîòèêîâûå ôóíêöèè? Ãäå ïðîïèñûâàòü ïàðàìåòð ïîä ïîèñê êîíêðåòíîãî áàðà â èñòîðèè? ß ïðåäïîëîæèë, ÷òî ýòî óêàçûâàåòñÿ â ìàññèâå Time[], è âî âñåõ ôóíêöèÿõ îïèñàííûõ Âàìè ìåíÿþ Time[0] íà íóæíîå ìíå ÷èñëî, äëÿ ýêñïåðèìåíòà Time[3].
    Volumes_SetData - äàåò çàäà÷ó äëÿ DLL ñêà÷àòü äàííûå äëÿ äàííîãî èíäèêàòîðà

    Volumes_GetData - îïðàøèâàåò DLL íà ïðåäìåò òîãî, ñêà÷àíû ëè äàííûå èç ïðåäûäóùåãî çàïðîñà, è åñëè ñêà÷àíû óñòàíîâèò volumes_init â çíà÷åíèå True. Volumes_GetData äåéñòâóåò àñèíõðîííî, òî åñòü ïîñëå _SetData íàäî îïðàøèâàòü DLL êàæäûå 100-200 ìèëèñåêóíä íà ïðåäìåò ïîëó÷åíèÿ äàííûõ. Ñàìè äàííûå â èíäèêàòîð íå ïîÿâÿòñÿ, - òîëüêî ÷åðåç ôóíêöèþ îïðîñà DLL (Volumes_GetData). Ôîðìàëüíî Âû ìîæåòå ýòî äåëàòü ïîòèêîâî.

    Äåëàòü ïîòèêîâî SetData íå íóæíî.

    p.s. äëÿ îòñûëêè è îïðîñà äàííûõ Âû äîëæíû îáÿçàòåëüíî óñòàíîâèòü indicator_client

    indicator_client - ñîñòîèò èç áóêâ CDPA è ÷åòûðå öèôðû êîòîðûå äàþò óíèêàëüíûé èäåíòèôèêàòîð èíäèêàòîðà. Òåîðåòè÷åñêè, ïðè èçâåñòíîì èäåíòèôèêàòîðå, ìîæíî SetData äåëàòü â îäíîì èíäèêàòîðàðîå, à ïîëó÷àòü äàííûå â äðóãîì.

    // DO NOT CHANGE THIS CODE & DATA
    do
    {
    indicator_client = "CDPA" + StringSubstr(DoubleToString(TimeLocal(),0),7,3)+"" +DoubleToStr(MathAbs((MathRand()+3)%10),0);
    } while (GlobalVariableCheck(indicator_client));
    GlobalVariableTemp(indicator_client);

+ Îòâåòèòü â òåìå
Ñòðàíèöà 1 èç 4 1 2 3 4 ÏîñëåäíÿÿÏîñëåäíÿÿ

Âàøè ïðàâà

  • Âû íå ìîæåòå ñîçäàâàòü íîâûå òåìû
  • Âû íå ìîæåòå îòâå÷àòü â òåìàõ
  • Âû íå ìîæåòå ïðèêðåïëÿòü âëîæåíèÿ
  • Âû íå ìîæåòå ðåäàêòèðîâàòü ñâîè ñîîáùåíèÿ
           

 


(C) 2009-2023 ClusterDelta.com.