[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 272
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
E onde está esta variável definida explicitamente, se não é um segredo? :) Vejo na bibliotecab-PSI@Base.mqh que ela é apenas declarada:
Mas não há essencialmente mais nada. Na verdade, o valor do instrumento atual é devolvido por padrão através do Symbol(). Então, por que precisamos de uma variável aqui?
Já respondi a esta pergunta na seção sobre multimoedas - símbolo atual = Símbolo() - este é apenas um caso especial.
P.S. Sua abordagem é interessante: você pega o código de outra pessoa e tenta "encaixá-lo" em sua lógica - você tem todo o direito, mas não me pergunte: "Por que sua lógica é diferente da minha!
Já respondi a esta pergunta, onde sobre a multicurrency - símbolo atual = Symbol() - este é apenas um caso especial.
P.S. Você tem uma abordagem interessante: você pega o código de outra pessoa e tenta "encaixá-lo" em sua lógica - você tem todo o direito, mas não me pergunte: "Por que sua lógica é diferente da minha!
Não vou ajustá-lo. Quero apenas estudar como ela é implementada. Mas eu não vou copiar nada. Estou interessado em ver como pensa um profissional. Essa é a verdadeira razão. Então, aqui está ele.
Estou olhando para a função fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0) vazia:
Esta variável não é declarada dentro desta função. Também não é declarado em outros 2 arquivos base (inclusão e função). Não está claro onde procurá-lo. É isso que estou pedindo. Eu quero entender onde ela apareceu originalmente, ou seja, declarada. Se você não se importa de me dizer...
Há também mais uma coisa estranha com outra variável. As seguintes linhas na funçãobool fCheck_LevelsBLOC:
bda_Price[li_cmd] é mencionado pela primeira vez na bibliotecab-PSI@Base.mqh:
bda_Price[2];Os elementos da matriz não são especificados. Portanto, eles são iguais a zero cada um. Significa que uma expressão qualquer que seja o parâmetro da matriz li_cmd terá o valor 0?
Olá a todos. Por favor, respondam a todos que podem criar um roteiro que aumente os lotes ao abrir um negócio.
Você está abrindo um concurso aqui para satisfação no trabalho??? Normalmente não são as tarefas que satisfazem...
Se você não entender alguma coisa, pergunte-nos, nós o ajudaremos.
Ou vá para o trabalho - lá satisfaz tanto você como o trabalho ... por uma taxa
É possível descobrir os preços (Ask and Bid) na história por tempo a partir da EA? Por exemplo, Asc 10 minutos atrás ou 10 segundos atrás. Existem funções conhecidas para obter uma série temporal de bares com preços de abertura e fechamento e Hai Lows em um determinado período de tempo, mas em um momento específico, como conhecer o Ask and Bid.
Não há Ask, apenas Bid! A propósito, todos gostariam disso, inclusive eu!
Asq de jeito nenhum, apenas Licite! A propósito, todos gostariam disso, inclusive eu!
Explicar como descobrir o Bid 10 segundos atrás de preferência em código.
Perguntei mais cedo sobre as arrays. Ainda não parece ter sido bem sucedido. Quando você o executa no testador, há uma divisão por zero. Isso significa que há zero em alguma matriz. Não consigo descobrir onde está o erro. Código em anexo. Os comentários estão em russo no WORDe. Desculpe por isso. Meu Metaeditor não suporta o idioma russo.
Ajude-me a encontrar o(s) erro(s). E se você não se importar de explicá-los.
Неполучилось сразу и два файла поместить. Вордовский документ неразрешается всавлять. Как иначе проконтировать на русском незнаю , только полностью код скопировать с ворда и поместить сюда //быстры 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); }É possível descobrir os preços (Ask and Bid) na história por tempo a partir da EA? Por exemplo, Asc 10 minutos atrás ou 10 segundos atrás. Existem funções conhecidas de obter séries temporais de barras com preços de abertura e fechamento e Hai Lows em um determinado período de tempo, mas em um ponto específico do tempo como descobrir o Ask and Bid.
Há ticks.raw file na pasta /history/server/, de lá você pode teoricamente obter tanto Bid como Ask pelos símbolos do Market Watch por um curto período de tempo antes do momento atual. Faça uma busca de fórum nesta direção... Eu não posso dizer nada específico sobre o mecanismo de armazenamento de dados naquele arquivo a partir da memória.
Perguntei mais cedo sobre as arrays. Ainda não parece ter sido bem sucedido. Quando você o executa no testador, há uma divisão por zero. Isso significa que há zero em alguma matriz. Não consigo descobrir onde está o erro. Código em anexo. Os comentários estão em russo no WORDe. Desculpe por isso. Meu Metaeditor não suporta o idioma russo.
Ajude-me a encontrar o(s) erro(s). E se você não se importar de explicá-los.
Recomendo escrever Print(ao que dividimos) antes de cada divisão - você saberá imediatamente onde está o zero.
Recomendo entrar em Print(ao que dividimos); antes de cada divisão, você saberá imediatamente onde está o zero
.
Há apenas uma divisão. E de acordo com a função CMM (embora esteja cheia), ela diz que não há dados suficientes na matriz resultante na função. Não consigo entender por que. É por isso que eu recebo divisão por zero.