Construído um indicador - tabela de resumo de volatilidade para instrumentos selecionados. Os dados devem ser calculados igualmente, independentemente do gráfico em que o indicador foi instalado. No entanto, ele o calcula de forma diferente. Dependendo se o gráfico tem JPY no denominador.
Se houver, a mesa tem este aspecto:
se não, é o que parece:
Aqui está o código:
#property copyright"Vasya Pupkin"#property link""#property indicator_separate_window//------- Внешние параметры индикатора ----------------------------------------+externint BARS = 100; // Кол-во баров для рассчетаexternint eiOffsetY = 15; // Смещение текста по вертикалиexternint eiStepY = 12; // Шаг смещения текста по вертикалиexternint eiX1Row = 3; // Координата X первой колонкиexternint eiX2Row = 50; // Координата X второй колонкиexternint eiX3Row = 100; // Координата X третей колонкиexternint eiX4Row = 150; // Координата X четвёртой колонкиexternint eiX5Row = 200; // Координата X пятой колонкиexternint eiX6Row = 250; // Координата X шестой колонкиexternint eiX7Row = 300; // Координата X седьмой колонкиexternint eiX8Row = 350; // Координата X восьмой колонкиexternint eiX9Row = 400; // Координата X восьмой колонкиexterncolor ecText = Gray; // Цвет текстаexternstring Symbols = "audcad,audchf,audjpy,audnzd,audusd,cadchf,cadjpy,chfjpy,euraud,eurcad";
//------- Глобальные переменные индикатора ------------------------------------+int nWindow_ToDay; // Номер окна//------- Буферы индикатора ---------------------------------------------------+//------- Поключение внешних модулей ------------------------------------------+//+----------------------------------------------------------------------------+//| Custom indicator initialization function |//+----------------------------------------------------------------------------+void init() {
nWindow_ToDay=WindowFind("VolatilityTab");
if (nWindow_ToDay<0) nWindow_ToDay=WindowsTotal();
DeleteObjects();
Comment("");
}
//+----------------------------------------------------------------------------+//| Custom indicator deinitialization function |//+----------------------------------------------------------------------------+void deinit() {
DeleteObjects();
Comment("");
}
//+----------------------------------------------------------------------------+//| Custom indicator iteration function |//+----------------------------------------------------------------------------+void start() {
DeleteObjects();
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SetLabel("Volatility_00", "TF", Red, eiX1Row, eiOffsetY+eiStepY);
SetLabel("Volatility_10", "M5", ecText, eiX1Row, eiOffsetY+2*eiStepY);
SetLabel("Volatility_20", "M15", ecText, eiX1Row, eiOffsetY+3*eiStepY);
SetLabel("Volatility_30", "M30", ecText, eiX1Row, eiOffsetY+4*eiStepY);
SetLabel("Volatility_40", "H1", ecText, eiX1Row, eiOffsetY+5*eiStepY);
SetLabel("Volatility_50", "H4", ecText, eiX1Row, eiOffsetY+6*eiStepY);
SetLabel("Volatility_60", "D1", ecText, eiX1Row, eiOffsetY+7*eiStepY);
SetLabel("Volatility_70", "Week", ecText, eiX1Row, eiOffsetY+8*eiStepY);
SetLabel("Volatility_80", "Month", ecText, eiX1Row, eiOffsetY+9*eiStepY);
string syb[];
int k, r, countX,countY=1;
StrSplit(Symbols, syb, ",");
if (ArraySize(syb)==0) StrSplit(Symbols, syb, ";");
r=ArraySize(syb);
for (k=0; k<r; k++) {
syb[k]=StringUpper(syb[k]);
countX++;
SetLabel("Volatility_"+"0"+countX, syb[k], Red, countX*eiX2Row, eiOffsetY+eiStepY);
int i,s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,s7=0,s8=0,b;
for (i=BARS; i>0; i--)
{
s1+=(iHigh(syb[k],5,i)-iLow(syb[k],5,i))/Point;
//Comment(MarketInfo(syb[k],MODE_DIGITS));
s2+=(iHigh(syb[k],15,i)-iLow(syb[k],15,i))/Point;
s3+=(iHigh(syb[k],30,i)-iLow(syb[k],30,i))/Point;
s4+=(iHigh(syb[k],60,i)-iLow(syb[k],60,i))/Point;
s5+=(iHigh(syb[k],240,i)-iLow(syb[k],240,i))/Point;
s6+=(iHigh(syb[k],1440,i)-iLow(syb[k],1440,i))/Point;
s7+=(iHigh(syb[k],10080,i)-iLow(syb[k],10080,i))/Point;
s8+=(iHigh(syb[k],43200,i)-iLow(syb[k],43200,i))/Point;
b++;
}
SetLabel("Volatility_"+countY+countX,s1/b+ " п.", ecText, countX*eiX2Row, eiOffsetY+2*eiStepY);
countY++;
SetLabel("Volatility_"+countY+countX,s2/b+ " п.", ecText, countX*eiX2Row, eiOffsetY+3*eiStepY);
countY++;
SetLabel("Volatility_"+countY+countX,s3/b+ " п.", ecText, countX*eiX2Row, eiOffsetY+4*eiStepY);
countY++;
SetLabel("Volatility_"+countY+countX,s4/b+ " п.", ecText, countX*eiX2Row, eiOffsetY+5*eiStepY);
countY++;
SetLabel("Volatility_"+countY+countX,s5/b+ " п.", ecText, countX*eiX2Row, eiOffsetY+6*eiStepY);
countY++;
SetLabel("Volatility_"+countY+countX,s6/b+ " п.", ecText, countX*eiX2Row, eiOffsetY+7*eiStepY);
countY++;
SetLabel("Volatility_"+countY+countX,s7/b+ " п.", ecText, countX*eiX2Row, eiOffsetY+8*eiStepY);
countY++;
SetLabel("Volatility_"+countY+countX,s8/b+ " п.", ecText, countX*eiX2Row, eiOffsetY+9*eiStepY);
s1=0;
s2=0;
s3=0;
s4=0;
s5=0;
s6=0;
s7=0;
s8=0;
b=0;
countY=1;
}
}
//+----------------------------------------------------------------------------+//| Удаление объектов. |//+----------------------------------------------------------------------------+void DeleteObjects() {
string st="Volatility_";
int i, j;
for (i=0; i<9; i++) {
for (j=0; j<15; j++) ObjectDelete(st+i+j);
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Установка текстовой метки |//+----------------------------------------------------------------------------+//| Параметры: |//| nm - наименование объекта |//| tx - текст |//| cl - цвет метки |//| xd - координата X в пикселах |//| yd - координата Y в пикселах |//| cr - номер угла привязки (0 - левый верхний) |//| fs - размер шрифта (8 - по умолчанию) |//+----------------------------------------------------------------------------+void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=8) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, nWindow_ToDay, 0,0);
ObjectSetText(nm, tx, fs);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER , cr);
ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Разбиение строки на массив элементов |//+----------------------------------------------------------------------------+//| Возврат: |//| Количество элементов в массиве |//| Параметры: |//| source - текстовая строка |//| dest - выходной массив |//| delimeter - разделитель |//+----------------------------------------------------------------------------+int StrSplit(string source, string& dest[], string delimeter=";") {
int cnt=0;
int last_pos=0;
int pos=StringFind(source, delimeter, last_pos);
while (pos!=-1) {
ArrayResize(dest, cnt+1);
dest[cnt]=StringSubstr(source, last_pos, pos-last_pos);
cnt++;
last_pos=pos+1;
pos=StringFind(source, delimeter, last_pos);
}
if (last_pos!=0 && last_pos<StringLen(source)) {
ArrayResize(dest, cnt+1);
dest[cnt]=StringSubstr(source, last_pos, StringLen(source)-last_pos);
cnt++;
}
return (cnt);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Возвращает строку в ВЕРХНЕМ регистре |//+----------------------------------------------------------------------------+string StringUpper(string s) {
int c, i, k=StringLen(s), n;
for (i=0; i<k; i++) {
n=0;
c=StringGetChar(s, i);
if (c>96 && c<123) n=c-32; // a-z -> A-Zif (c>223 && c<256) n=c-32; // а-я -> А-Яif (c==184) n=168; // ё -> Ёif (n>0) s=StringSetChar(s, i, n);
}
return(s);
}
Что нового по сравнению с версией 1.4? stSender. Изменена процедура записи файлов под требования билда 610 и выше. stReceiver. Функции проверки существования файла и копирования файлов заменены на аналогичные, поддерживающие UNICODE (для работоспособности в билде 610 и выше). Разработан и доступен для покупки новый советник e-Reverser...
Construído um indicador - tabela de resumo de volatilidade para instrumentos selecionados. Os dados devem ser calculados igualmente, independentemente do gráfico em que o indicador foi instalado. No entanto, ele o calcula de forma diferente. Dependendo se o gráfico tem JPY no denominador.
Já encontramos isto - o JPY tem menos dígitos fracionários. Portanto, o Ponto será diferente. Ou algo mais?
Olá, você poderia me dizer como fazer isso? Como posso prescrever, que a parada de arrasto não foi perto do indicador, mas 10 pontos mais baixo ou mais alto, respectivamente?
if (OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUY&&
NormalizeDouble(SAR,Digits)>NormalizeDouble(OrderStopLoss(),Digits)&&NormalizeDouble(SAR,Digits)<NormalizeDouble(Bid,Digits))
OrderModify(OrderTicket(),0,SAR,0,0,Blue);
Como resolver este problema? Eu escrevi um EA onde um pedido pendente com lote aumentado (por exemplo, em 2 vezes) é colocado em um comércio mal sucedido,
Mas quando a ordem pendente é executada (raramente, em 1 de cada 10 casos), o lote não é multiplicado pelo coeficiente, embora tenha sido inicialmente colocado de acordo com o algoritmo.
Aqui está um exemplo:
um negócio foi fechado com 0,4 lotes, imediatamente um pedido pendente é colocado com 0,8 lote e quando é executado, o volume acaba sendo de 0,4 lote.
Como resolver este problema? Eu escrevi um EA onde um pedido pendente com lote aumentado (por exemplo, em 2 vezes) é colocado em um comércio mal sucedido,
Mas quando a ordem pendente é executada (raramente, em 1 de cada 10 casos), o lote não é multiplicado pelo coeficiente, embora tenha sido inicialmente colocado de acordo com o algoritmo.
Aqui está um exemplo:
um negócio foi fechado com 0,4 lotes e um pedido pendente com 0,8 lotes é colocado; quando é executado, o volume acaba sendo de 0,4 lotes.
O que pode ser?
Obrigado.
Poderia ser uma ocorrência parcial? O que está nos registros?
Boa noite.
Construído um indicador - tabela de resumo de volatilidade para instrumentos selecionados. Os dados devem ser calculados igualmente, independentemente do gráfico em que o indicador foi instalado. No entanto, ele o calcula de forma diferente. Dependendo se o gráfico tem JPY no denominador.
Se houver, a mesa tem este aspecto:
se não, é o que parece:
Aqui está o código:
Boa noite.
Construído um indicador - tabela de resumo de volatilidade para instrumentos selecionados. Os dados devem ser calculados igualmente, independentemente do gráfico em que o indicador foi instalado. No entanto, ele o calcula de forma diferente. Dependendo se o gráfico tem JPY no denominador.
Já encontramos isto - o JPY tem menos dígitos fracionários. Portanto, o Ponto será diferente. Ou algo mais?
A propósito, é recomendado o uso de Point() ou _PointEu já encontrei isto - o JPY tem menos dígitos fracionários. Portanto, o Ponto será diferente
tentou adicionar uma condição
e aqui dividido por Z^
mas, no final, no par sem o iene, tudo está claro:
mas com o iene é uma bagunça:
tentou adicionar uma condição
e aqui dividido por Z^
mas, no final, no par sem o iene, tudo está claro:
Mas com o iene, é uma bagunça:
SubstituirPonto por "SymbolInfoDouble(syb[k],SYMBOL_POINT)".
SubstituirPonto por "SymbolInfoDouble(syb[k],SYMBOL_POINT)".
Obrigado, agora está claro em todos os lugares, e nada de screw ups
Obrigado, agora está claro em todos os lugares, e sem erros.
Otimizar um pouco o código, chamar o cálculo apenas uma vez em um caractere:
Otimizar um pouco o código, chamar o cálculo apenas uma vez em um caractere:
E, nesse espírito, reduzir todo o código a uma operação de matriz concisa. Quaisquer repetições da mesma lógica devem ser projetadas como loops.
Bom dia!
Como resolver este problema? Eu escrevi um EA onde um pedido pendente com lote aumentado (por exemplo, em 2 vezes) é colocado em um comércio mal sucedido,
Mas quando a ordem pendente é executada (raramente, em 1 de cada 10 casos), o lote não é multiplicado pelo coeficiente, embora tenha sido inicialmente colocado de acordo com o algoritmo.
Aqui está um exemplo:
um negócio foi fechado com 0,4 lotes, imediatamente um pedido pendente é colocado com 0,8 lote e quando é executado, o volume acaba sendo de 0,4 lote.
O que pode ser?
Obrigado.
Bom dia!
Como resolver este problema? Eu escrevi um EA onde um pedido pendente com lote aumentado (por exemplo, em 2 vezes) é colocado em um comércio mal sucedido,
Mas quando a ordem pendente é executada (raramente, em 1 de cada 10 casos), o lote não é multiplicado pelo coeficiente, embora tenha sido inicialmente colocado de acordo com o algoritmo.
Aqui está um exemplo:
um negócio foi fechado com 0,4 lotes e um pedido pendente com 0,8 lotes é colocado; quando é executado, o volume acaba sendo de 0,4 lotes.
O que pode ser?
Obrigado.
Poderia ser uma ocorrência parcial? O que está nos registros?