Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 258

 
mzk_3om6u:


Je ne comprends toujours pas ce qu'il faut mettre, et la façon dont le script est écrit n'est pas particulièrement claire non plus :(

experts/files/trx_rowa.vbs

C'est un troyen maléfique, mal rasé, inconnu de la science. Devlala, vous avez le googol à une distance de souris, ne pouvez-vous pas comprendre le code source ? Changez IE.visible = false en IE.visible = true, exécutez-le et voyez. Le script analyse votre calendrier et écrit tout en cyrillique dans un fichier texte. Ouvrez-le et regardez, il se lit bien.

 
gyfto:

experts/files/trx_rowa.vbs

C'est un troyen maléfique, mal rasé, inconnu de la science. Devlala, vous avez le googol à une distance de souris, ne pouvez-vous pas comprendre le code source ? Changez IE.visible = false en IE.visible = true, exécutez-le et voyez. Le script analyse votre calendrier et écrit tout en cyrillique dans un fichier texte. Ouvrez-le et regardez, il se lit bien.


'On Error Resume Next
Dim IE : Set IE = WSCript.CreateObject("InternetExplorer.Application")
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim fTxtName : fTxtName = Left(WSCript.ScriptFullName,len(WSCript.ScriptFullName)-3) & "txt"
Set TxtFile = objFSO.OpenTextFile(fTxtName, 2, True)'открываем файл для записи
IE.visible = false' браузер в фоновом режиме
IE.navigate "http://www.fxteam.ru/forex/economic-calendar/2013_49.html"
Do While IE.Busy
        WSCript.Sleep 500
loop
Do While IE.document.getElementsByClassName("tr1 rowa").Item(0).getElementsByTagName("TD").Item(4) is Nothing' пока этот элемент страницы не загрузится
        WSCript.Sleep 500' будем ждать загрузки страницы
loop
Set tr1_rowa = IE.document.getElementsByClassName("tr1 rowa")
For i = 0 to tr1_rowa.length - 1
        TxtFile.WriteLine tr1_rowa.Item(i).getElementsByTagName("TD").Item(4).InnerText
Next
Set tr0_rowa = IE.document.getElementsByClassName("tr0 rowa")
For i = 0 to tr0_rowa.length - 1
        TxtFile.WriteLine tr0_rowa.Item(i).getElementsByTagName("TD").Item(4).InnerText
Next
Set IE = Nothing' закрываем браузер
TxtFile.Close
WSCript.Quit()

Je ne comprends vraiment pas de quel genre de texte il s'agit. Commençons par,

1. Je peux télécharger le site dans un fichier.

2. Autres options :

2a) Exécuter la fonction de recodage (les caractères illisibles disparaîtront, et il y aura une erreur dans le journal - ce qui est ennuyeux), et analyser les lettres russes (erreurs ennuyeuses, dans le journal, mais elles n'affectent pas le travail ).

2b) Laisser les choses telles qu'elles sont, et faire quelques problèmes avec les mots-clés (comme lundi = "РџÐЅÐµÐґÐµÐ "ÑЊÐЅÐє"), et faire sortir l'information.

2c) Ecrivez une fonction qui traduit "Monday" en "РџÐѕÐЅÐµÐґÐµÐ "ÑЊÐЅÐøє", et sortez ce qui est nécessaire.

J'ai essayé d'écrire une fonction, mais il est évident que je ne connais pas les encodages :) Voici ce que j'ai obtenu, en dessous se trouve l'original.

string win_utf8(string s) { 
   string outputi = "";
   string other1 = "Ё";
   string other2 = "ё";
   string other3 = "Є";
   string other4 = "є";
   string other5 = "I";
   string other6 = "i";
   string other7 = "Ї";
   string other8 = "ї";
   for (int i = 0; i < StringLen(s); i++)
   {
      if (StringGetChar(s,i) > 191) 
      {
         int output=StringGetChar(s,i)+848;
      }
         else 
         {
            if (StringSubstr(s,i,1) != other1)output=StringGetChar(s,i);
            else output=1025; 
            if (StringSubstr(s,i,1) != other2)output=StringGetChar(s,i);
            else output=1105; 
            if (StringSubstr(s,i,1) != other3)output=StringGetChar(s,i);
            else output=1028; 
            if (StringSubstr(s,i,1) != other4)output=StringGetChar(s,i);
            else output=1108; 
            if (StringSubstr(s,i,1) != other5)output=StringGetChar(s,i);
            else output=1030; 
            if (StringSubstr(s,i,1) != other6)output=StringGetChar(s,i);
            else output=1110; 
            if (StringSubstr(s,i,1) != other7)output=StringGetChar(s,i);
            else output=1031; 
            if (StringSubstr(s,i,1) != other8)output=StringGetChar(s,i);
            else output=1111; 
            }
   outputi=outputi+StringSetChar("",0,output);
   }
   
   return (outputi);
}
function win_utf8($in_text) { 
   $output = "";
   $other[1025] = "Ё";
   $other[1105] = "ё";
   $other[1028] = "Є";
   $other[1108] = "є";
   $other[1030] = "I";
   $other[1110] = "i";
   $other[1031] = "Ї";
   $other[1111] = "ї";
   for ($i = 0; $i < strlen($in_text); $i++){
      if (ord($in_text{$i}) > 191) {
         $output.="&#".(ord($in_text{$i})+848).";";
      }else {
         if (array_search($in_text{$i}, $other)===false){
            $output.=$in_text{$i};
         }else {
            $output.="&#".array_search($in_text{$i}, $other).";";
         }
      }
   }
   return $output;
}
 
mzk_3om6u:

Je ne comprends vraiment pas quel genre de texte c'est, où le mettre.


Je l'ai décommenté ici, tu vois. Copiez ce code dans le bloc-notes, enregistrez le bloc-notes sous le nom de trx_rowa.vbs (pas txt), obtenez le vbs-script. Transférez le script dans des fichiers experts. Vous pouvez le vérifier d'abord, l'exécuter, ou vous pouvez écrire immédiatement son appel depuis mql4-code. La façon de l'appeler est indiquée. Il crée un fichier txt avec le même nom que lui, et tout votre cyrillique est là. La seule chose est que le sommeil ne sera pas appelé depuis votre induke, vous devrez vous arranger. Vous pourriez le faire comme ça :

datetime myTimer = TimeCurrent() + 60;
while(TimeCurrent() < myTimer){}
//дальше код...

mais il est peu probable que ça marche. Il y avait une minuterie WinAPI sur le forum.

 
gyfto:

J'ai décommenté là, regarde. Ce code, vous le copiez dans le bloc-notes, le bloc-notes le sauvegarde sous le nom de trx_rowa.vbs (pas txt), vous obtenez le script vbs. Transférer le script dans des fichiers experts. Vous pouvez le vérifier d'abord, l'exécuter, ou vous pouvez écrire immédiatement son appel depuis mql4-code. La façon de l'appeler est indiquée. Il crée un fichier txt avec le même nom que lui et tout votre cyrillique est là.


Je vois ce que tu veux dire ! Merci pour le moyen d'extraire le cyrillique, mais la tâche principale est d 'obtenir l'heure/le pays/l'importance, mais l'importance est là sous forme d'image, et elle ne peut être saisie qu'en latin, et donc je vais garder un moyen alternatif pour télécharger les pages.

Merci :)

 
mzk_3om6u:


l'objectif principal est d'obtenir le temps/pays/importance


Heure - .getElementsByTagName("TD").item(0).InnerText

pays - .getElementsByTagName("TD").item(1).InnerText

importance - .getElementsByTagName("TD").item(2).InnerHTML, et là vous pouvez trouver quel numéro est dans la ligne /i/calendar/impact1.png

 

Y a-t-il une limitation à l'utilisation des indicateurs ?

Si j'utilise un indicateur dans mon EA, alors lorsque le programme termine le test, l'indicateur est tiré.

Si j'utilise le même indicateur mais avec des paramètres différents - alors deux indicateurs sont dessinés.

Je veux inclure un indicateur avec des paramètres dynamiques dans mon EA - quand je l'arrête, il commence à fonctionner très lentement et quand je l'arrête, il affiche Armageddon au lieu d'un graphique (j'ai 30 indicateurs attachés - autant d'indicateurs peuvent s'afficher sur un graphique).

La question est la suivante : s'il n'affiche que 30, comprend-il le reste dans le script ?

 
tiiga:

Y a-t-il une limitation à l'utilisation des indicateurs ?

Si j'utilise un indicateur dans mon EA, alors lorsque le programme termine le test, l'indicateur est tiré.

Si j'utilise le même indicateur mais avec des paramètres différents - alors deux indicateurs sont dessinés.

Je veux inclure un indicateur avec des paramètres dynamiques dans mon EA - l'EA commence à fonctionner très lentement et quand je l'arrête, il affiche Armageddon au lieu d'un graphique.

Je voudrais transférer la fonction principale de l'indicateur à mon EA - il fonctionnera plus rapidement et il n'y aura pas d'Armageddon.

Transfert du code de l'indicateur au code du conseiller expert. Structure de l'indicateur.

Transfert du code de l'indicateur vers le code du conseiller expert. Schéma général de construction des conseillers experts et des fonctions d'indicateur

Transfert du code indicateur au code expert. Conclusion
 
merci ! votre lien ne clique pas
 
tiiga:

Y a-t-il une limitation à l'utilisation des indicateurs ?

Si j'utilise un indicateur dans mon EA, alors lorsque le programme termine le test, l'indicateur est tiré.

Si j'utilise le même indicateur mais avec des paramètres différents - alors deux indicateurs sont dessinés.

Je veux inclure un indicateur avec des paramètres dynamiques dans mon EA - quand je l'arrête, il commence à fonctionner très lentement et quand je l'arrête, il affiche Armageddon au lieu d'un graphique (j'ai 30 indicateurs attachés - autant d'indicateurs peuvent s'afficher sur un graphique).

La question est la suivante : s'il n'affiche que 30, comprend-il le reste dans le script ?


void HideTestIndicators( bool hide)

La fonction définit un drapeau pour masquer les indicateurs appelés par l'Expert Advisor. Lorsque vous ouvrez un graphique après un test, les indicateurs marqués du drapeau de masquage ne seront pas affichés sur le graphique de test. Avant chaque appel, l'indicateur est marqué de l'indicateur de dissimulation actuel.
Il convient de noter que seuls les indicateurs qui sont directement appelés par le conseiller expert testé peuvent être affichés dans le graphique de test.
Paramètres :
cacher - TRUE - si vous souhaitez masquer les indicateurs, sinon FALSE.
Exemple :
  HideTestIndicators(true) ; MaCurrent=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,0) ; MaPrevious=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,1) ; HideTestIndicators(false) ;
 

Quelle est la méthode correcte pour trouver le pourcentage de drawdown ?

(DoubleToStr(AccountBalance(), 2) - DoubleToStr(AccountFreeMargin(), 2))) * 100