[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 272
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
J'ai déjà répondu à cette question, où à propos de multidevise - symbole actuel = Symbol() - ce n'est qu'un cas spécial.
P.S. Votre approche est intéressante : vous prenez le code de quelqu'un d'autre et vous essayez de l'adapter à votre logique - vous avez tous les droits, mais ne me demandez pas : "Pourquoi votre logique est différente de la mienne !
Je ne vais pas l'ajuster. Je veux juste étudier comment elle est mise en œuvre. Mais je ne copierai rien. Je suis intéressé de voir comment un pro pense. C'est la vraie raison. Alors, voilà.
Je regarde la fonction void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0):
Cette variable n'est pas déclarée dans cette fonction. Il n'est pas non plus déclaré dans les deux autres fichiers de base (inclusion et fonction). Il n'est pas évident de savoir où le chercher. C'est ce que je demande. Je veux comprendre où il est apparu à l'origine, c'est-à-dire déclaré. Si ça ne vous dérange pas de me dire...
Il y a aussi une autre chose étrange avec une autre variable. Les lignes suivantes dans la fonctionbool fCheck_LevelsBLOC:
bda_Price [li_cmd] est mentionné pour la première fois dans la bibliothèqueb-PSI@Base.mqh:
bda_Price[2];Leséléments du tableau ne sont pas spécifiés. Ils sont donc égaux à zéro chacun. Cela signifie qu'une expression quel que soit le paramètre du tableau li_cmd prendra la valeur 0 ?
Bonjour à tous. Veuillez répondre à tous ceux qui peuvent créer un script qui augmente les lots lors de l'ouverture d'une transaction.
Vous ouvrez un appel d'offres ici pour la satisfaction au travail ??? En général, ce ne sont pas les tâches qui satisfont...
Si vous ne comprenez pas quelque chose, demandez-nous, nous vous aiderons.
Ou bien allez au travail - vous serez satisfaits, vous et le travail... à titre onéreux
Est-il possible de trouver les prix (Ask et Bid) dans l'historique par temps à partir de l'EA ? Par exemple Asc 10 min ago ou 10 sec ago. Il existe des fonctions connues permettant d'obtenir une série chronologique de barres avec les prix d'ouverture et de clôture ainsi que les prix les plus bas sur une période donnée, mais à un moment précis, comment connaître les prix d'achat et de vente.
Il n'y a pas de demande, seulement des offres ! D'ailleurs, tout le monde aimerait ça, moi y compris !
Asq pas question, seulement Bid ! D'ailleurs, tout le monde aimerait ça, moi y compris !
Expliquez comment trouver l'enchère d'il y a 10 secondes, de préférence en code.
J'ai posé une question sur les tableaux plus tôt. On dirait qu'on n'y arrive toujours pas. Lorsque vous le passez sur le testeur, il y a une division par zéro. Cela signifie qu'il y a un zéro dans un tableau. Je n'arrive pas à savoir où se trouve l'erreur. Code en annexe. Les commentaires sont en russe dans WORDe. Désolé pour ça. Mon Metaeditor ne supporte pas la langue russe.
Aidez-moi à trouver l'erreur ou les erreurs. Et si ça ne vous dérange pas de les expliquer.
Неполучилось сразу и два файла поместить. Вордовский документ неразрешается всавлять. Как иначе проконтировать на русском незнаю , только полностью код скопировать с ворда и поместить сюда //быстры MA extern int MA_Period1 = 8; extern int plius1 = 100; extern int MA_Shift1 = 0; extern int MA_Method1 = 0; //медленый MA extern int MA_Period2 = 13; extern int plius2 = 100; extern int MA_Shift2 = 0; extern int MA_Method2 = 3; //начало флета //поиск флета по сигналу или время extern bool start = true; // true ->по сигналу, false->по времени // по сигналу начинаем с данного времени extern int startHourFlatMA = 16; extern int startMinFlatMA = 00; //сигнал есть, ждем пока закроется BarEnd бар extern int BarEnd = 240; datetime LastTime; //datetime startTime; // по времени начьнем искать флет с extern int startHourFlat = 0; extern int startMinFlat = 0; //конец флета в промежутке времени или по истечению времени //начало промежутка extern int startHourEnd = 4; extern int startMinEnd = 45; //конец промежутка, и истечение времени по времени extern int endHourEnd = 7; extern int endMinEnd = 30; //включение фильтра Volumes extern bool volFiltr = true; //true -> включено, false -> выключено //skirtumas tarp penktadienio uzdarymo ir pirmadienio atidarymo extern int gep = 300; bool susikirtimas = false; //пересечение индикаторных линий bool flat; //массивы double chPriceH[], chPriceL[], chPriceO[], chPriceC[], chTime[]; double avgPriceH[], avgPriceL[], avgPriceO[], avgPriceC[]; int iH, iL ,iO, iC, iT; double C[], T[], y[]; int i = -1; // индекс массива int j = -1; // индекс массива int n = -1; // индекс массива double max; //максимаьная разница между элементами масивов int init () { ArrayResize(chPriceH, 0); ArrayResize(chPriceL, 0); ArrayResize(chPriceO, 0); ArrayResize(chPriceC, 0); ArrayResize(chTime, 0); ArrayResize(avgPriceH, 0); ArrayResize(avgPriceL, 0); ArrayResize(avgPriceO, 0); ArrayResize(avgPriceC, 0); ArrayResize (C, 0); ArrayResize (T, 0); ArrayResize (y, 0); } int start() { double volMA11, volMA12, volMA21, volMA22; double x[], y[]; Print("***старт***"); if(!TF_F_NewBar())return(0); Print("---1-собираем данные индикаторов---"); volMA11 = iCustom(NULL, 15, "volumeMA", 2, 1); volMA12 = iCustom(NULL, 15, "volumeMA", 2, 2); volMA21 = iCustom(NULL, 15, "volumeMA", 3, 1); volMA22 = iCustom(NULL, 15, "volumeMA", 3, 2); Print("volMA11 = "+volMA11); Print("volMA12 = "+volMA12); Print("volMA21 = "+volMA21); Print("volMA22 = "+volMA22); Print("----1 данные собраны---END"); Print("---2 какой день недели--"); if(DayOfWeek()==1 || DayOfWeek()==2 || DayOfWeek()==3 || DayOfWeek()==4) { Print("DayOfWeek = "+DayOfWeek()); Print("----2---END"); if(Hour() >= startHourFlatMA && Minute() >= startMinFlatMA) Print("---3 проверка времени, разрешается ли искать флет---"); { Print("время начала флета >= "+Hour()+":"+Minute()); Print("----3--end"); Print("---4 есть ли пересечение линий индикатора----"); if(volMA21 - volMA11 > 0 && volMA12 - volMA22 > 0) { //если было пересечение susikirtimas = true; Print("пересечение = "+susikirtimas); Print("---4---END"); Print("---5 жшдем окончания M240 свечи--"); LastTime = iTime(NULL, BarEnd, 1); Print("LastTime = "+LastTime); //startTime = Time[1]; } if(susikirtimas == true && iTime(NULL, BarEnd, 1)!= LastTime) { LastTime = iTime(NULL, BarEnd, 1); flat = true; Print("flat = "+flat); } if(flat == true) { Print(-начало флета есть"); Print("-- 6 собираем данные в массивы--"); //увеличиваем число элементов массива на один i++; Print("увеличиваем длину массива в зависимости от i "); ArrayResize(avgPriceH,i); ArrayResize(avgPriceL,i); ArrayResize(avgPriceO,i); ArrayResize(avgPriceC,i); Print("с каждой новой свечой должны получить новые элементы массивов"); avgPriceH[i] = High[1]; Print("AVG элемент avgPriceH["+i+"] = "+avgPriceH[i]); avgPriceL[i] = Low[1]; Print("AVG элемент avgPriceL["+i+"] = "+avgPriceL[i]); avgPriceO[i] = Open[1]; Print("AVG элемент avgPriceO["+i+"] = "+avgPriceO[i]); avgPriceC[i] = Close[1]; Print("AVG mэлементasyvo elementas avgPriceC["+i+"] = "+avgPriceC[i]); j++; Print("индех канальных массивов j = "+j); ArrayResize(chPriceC,j); Print("CH masyvo ilgis chPriceC = "+j); ArrayResize(chTime,j); Print("CH masyvo ilgis chTime = "+j); //включен ли фильтр if(volFiltr) { //да Print("да включен"); Print("volMA11 = "+volMA11, " Volume[1] = "+Volume[1]); if(volMA11 - Volume[1] >= 0)//фильтр { Print("записываем Close[1] ir Time[1] в массивы"); chPriceC[j] = Close[1]; Print("masyvo elementas chPriceC["+j+"] = "+j); chTime[j] = Time[1]; Print("masyvo elementas chTimev["+j+"] = "+j); } else { //renkam chPriceC[j] = 0; Print("masyvo elementas chPriceC["+j+"] = "+j); chTime[j] = 0; Print("masyvo elementas chTimev["+j+"] = "+j); } } Print("получилис отфильтрваные массивы с нулями "); else // jei filtras isjungtas, tada duomenys kanalo skaiciavimui { //renkam Print("если фильтр выключен"); Print("pradedam rinkti Close[1] ir Time[1] duomenis i masyvus po filtracijos"); //chPriceH[j] = High[1]; Print("masyvo elementas chPriceH["+j+"] = "+j); //chPriceL[j] = Low[1]; Print("masyvo elementas chPriceL["+j+"] = "+j); chPriceC[j] = Close[1]; Print("masyvo elementas chPriceC["+j+"] = "+j); //chPriceO[j] = Open[1]; Print("masyvo elementas chPriceO["+j+"] = "+j); chTime[j] = Time[1]; Print("masyvo elementas chTimev["+j+"] = "+j); } //suzinom kokio ilgio masyvai Print("после того как массивы собраны узнаем их длину"); Print("ArrayRange(chPriceC, 0) = "+iC); Print("фильтруем их от нулей, после фильтрции длина массивов меньше чем была до фильтрции"); for(int k = 0; k <= iC; k++) { if(chPriceC[k] > 0) { n++; ArrayResize(C,n); ArrayResize(T,n); C[n] = chPriceC[k]; T[n] = chTime[k]; Print("naujo masyvo elementas C["+n+"] = "+C[n]); Print("naujo masyvo elementas irasytas T["+n+"] = ",T[n]); Print("naujo atfiltruoto masyvo ilgis n = ",n); } } } } } Print("так масивы набирается свеча за свечой пока несработает 7 – ая часть кода"); Print("----------- 6 массивы набирается------------------------end"); Print("----------- 7 массивы набраны------------------------end"); //if(DayOfWeek()==0 || DayOfWeek()==6) return(0); if(((Hour() > startHourEnd && Minute() > startMinEnd) && //jei jau laikas po 6.30 Print("если начялось время начала поиска конца флета"); (volMA11 - volMA21 > 0 && volMA22 - volMA12 > 0)) || //пересечение индикаторных линий (Hour() > endHourEnd && Minute() > endMinEnd)) { // или кончилось время флета susikirtimas = false; //сбрасываем флаг начала пересичения инд. линий на вход во флет flat = false; //сбрасываем флаг начала флета i = -1; //Возвращаем начальные индексы массивов j = -1; //ищем линию регрении ArrayChLR(C, y, max);//ArrayLR(x, y) //ищем точки для фибо уровней double y161Plus_1 = y[1] + max/50 * 161; double y261Plus_1 = y[1] + max/50 * 261; double y361Plus_1 = y[1] + max/50 * 361; double y423Plus_1 = y[1] + max/50 * 423; double y161Minus_1 = y[1] - max/50 * 161; double y261Minus_1 = y[1] - max/50 * 261; double y361Minus_1 = y[1] - max/50 * 361; double y423Minus_1 = y[1] - max/50 * 423; double y161Plus_2 = y[n-1] + max/50 * 161; double y261Plus_2 = y[n-1] + max/50 * 261; double y361Plus_2 = y[n-1] + max/50 * 361; double y423Plus_2 = y[n-1] + max/50 * 423; double y161Minus_2 = y[n-1] - max/50 * 161; double y261Minus_2 = y[n-1] - max/50 * 261; double y361Minus_2 = y[n-1] - max/50 * 361; double y423Minus_2 = y[n-1] - max/50 * 423; //turim po dvi kainos koordinate, o laiko galim paimti is masyvo T[] //galim brezti linijas //y=(y2-y1)/(x2-x1)*(x-x1)+y1 double y161Plus_3 = (y161Plus_2-y161Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y161Plus_1; double y261Plus_3 = (y261Plus_2-y261Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y261Plus_1; double y361Plus_3 = (y361Plus_2-y361Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y361Plus_1; double y423Plus_3 = (y423Plus_2-y423Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y423Plus_1; double y161Minus_3 = (y161Plus_2-y161Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y161Plus_1; double y261Minus_3 = (y261Plus_2-y261Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y261Plus_1; double y361Minus_3 = (y361Plus_2-y361Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y361Plus_1; double y423Minus_3 = (y423Plus_2-y423Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y423Plus_1; //чертим линии SetTLine(Thistle, "", T[1], y161Plus_1, StrToTime("20:00"), y161Plus_3, 0, 1); SetTLine(Thistle, "", T[1], y261Plus_1, StrToTime("20:00"), y261Plus_3, 0, 1); SetTLine(Thistle, "", T[1], y361Plus_1, StrToTime("20:00"), y361Plus_3, 0, 1); SetTLine(Thistle, "", T[1], y423Plus_1, StrToTime("20:00"), y423Plus_3, 0, 1); SetTLine(Thistle, "", T[1], y161Minus_1, StrToTime("20:00"), y161Minus_3, 0, 1); SetTLine(Thistle, "", T[1], y261Minus_1, StrToTime("20:00"), y261Minus_3, 0, 1); SetTLine(Thistle, "", T[1], y361Minus_1, StrToTime("20:00"), y361Minus_3, 0, 1); SetTLine(Thistle, "", T[1], y423Minus_1, StrToTime("20:00"), y423Minus_3, 0, 1); } return(0); } //----------------------------------------------------------------------------------------------------- void ArrayChLR(double& x[], double& y[], double& max) { double a, b, c, sx=0, sx2=0, sxy=0, sy=0; int i, n=ArraySize(x); if (n>1) { for (i=0; i<n; i++) { sx+=i+1; sy+=x[i]; sxy+=(i+1)*x[i]; sx2+=(i+1)*(i+1); } a=sx*sy-n*sxy; c=sx*sx-n*sx2; if (c!=0) a=a/c; else a=0; b=(sy-a*sx)/n; ArrayResize(y, n); max = 0; double dif[]; ArrayResize(dif, n); for (i=0; i<n; i++) { y[i]=a*(i+1)+b; dif[i] = MathAbs(Close[i] - y[i]); if(dif[i] > max) max = dif[i]; } } else Print("ArrayLR(): per mazas x masyvo elementu skaicius! n=", n); }Est-il possible de trouver les prix (Ask et Bid) dans l'historique par temps à partir de l'EA ? Par exemple Asc 10 min ago ou 10 sec ago. Il existe des fonctions connues permettant d'obtenir des séries temporelles de barres avec les prix d'ouverture et de clôture et les creux des hausses au cours d'une certaine période, mais à un moment précis, comment trouver les prix d'achat et de vente.
Il y a un fichier ticks.raw dans le dossier /history/server/, à partir duquel vous pouvez théoriquement obtenir l'offre et la demande par les symboles de Market Watch pour une courte période avant le moment actuel. Faites une recherche sur le forum dans cette direction... De mémoire, je ne peux rien dire de précis sur le mécanisme de stockage des données dans ce fichier.
J'ai posé une question sur les tableaux plus tôt. On dirait qu'on n'y arrive toujours pas. Lorsque vous le passez sur le testeur, il y a une division par zéro. Cela signifie qu'il y a un zéro dans un tableau. Je n'arrive pas à savoir où se trouve l'erreur. Code en annexe. Les commentaires sont en russe dans WORDe. Désolé pour ça. Mon Metaeditor ne supporte pas la langue russe.
Aidez-moi à trouver l'erreur ou les erreurs. Et si ça ne vous dérange pas de les expliquer.
Je recommande d'écrire Print(à ce que nous divisons) avant chaque division - vous saurez immédiatement où se trouve le zéro.
Je recommande d'entrer Print(à ce que nous divisons) ; avant chaque division, vous saurez immédiatement où se trouve le zéro
.
Il n'y a qu'une seule division. Et selon la fonction CMM (bien qu'elle soit pleine), il est dit qu'il n'y a pas assez de données dans le tableau résultant de la fonction. Je ne comprends pas pourquoi. C'est pourquoi j'ai des divisions par zéro.
Expliquez comment trouver l'enchère d'il y a 10 secondes, de préférence en code.
Je n'en ai pas besoin, donc je ne suis pas intéressé par la façon de le faire. Cherchez, vous trouverez peut-être quelque chose ! Bonne chance !