Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
Classe para ajuste de preço, para qualquer ativo, inclusive miniindice e minidolar. - biblioteca para MetaTrader 5
- Visualizações:
- 4255
- Avaliação:
- Publicado:
- 2020.01.08 18:14
- Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Declaração do objeto
Como default o objeto é declado com o simbolo do gráfico. Caso deseje declarar um simbolo diferente do presente no grafico, é so declarar o objeto passando como argumento a string com o nome do simbolo, caso esse simbolo não exista, o objeto será inicializado como default.
Para verificar se o simbolo desejado foi inicializado, é so chamar a função " GetSymbolName() " que retorna uma string com o nome do simbolo.
void OnStart() { CPriceAdjustmentV1 Symbol1; //Default -> Symbol of the graph CPriceAdjustmentV1 Symbol2("EURUSD"); //User Symbol CPriceAdjustmentV1 Symbol3("NonexistentSymbol"); //Wrong Symbol printf("Symbol1 %s",Symbol1.GetSymbolName()); printf("Symbol2 %s",Symbol2.GetSymbolName()); printf("Symbol3 %s",Symbol1.GetSymbolName()); }
Colocando esse script no grafico do "GBPUSD"
Funções presentes
double AdjustPrice(double price)
Recebe o preco não ajustado e retorna o ajustado.
void OnStart() { CPriceAdjustmentV1 Symbol1; //Graph "PETR4" 0.01/point CPriceAdjustmentV1 Symbol2("DOLG20"); // 0.5/point CPriceAdjustmentV1 Symbol3("WING20"); // 5/point double Prices[]={95,110.5,60.85,314.555,623.6498756}; int n=ArraySize(Prices); for(int i=0;i<n;i++){ printf("Symbol: %s, TickZize: %f , Unadjusted price: %f, Adjusted price: %f",Symbol1.GetSymbolName(),SymbolInfoDouble(Symbol1.GetSymbolName(),SYMBOL_TRADE_TICK_SIZE),Prices[i],Symbol1.AdjustPrice(Prices[i])); } for(int i=0;i<n;i++){ printf("Symbol: %s, TickZize: %f , Unadjusted price: %f, Adjusted price: %f",Symbol2.GetSymbolName(),SymbolInfoDouble(Symbol2.GetSymbolName(),SYMBOL_TRADE_TICK_SIZE),Prices[i],Symbol2.AdjustPrice(Prices[i])); } for(int i=0;i<n;i++){ printf("Symbol: %s, TickZize: %f , Unadjusted price: %f, Adjusted price: %f",Symbol3.GetSymbolName(),SymbolInfoDouble(Symbol3.GetSymbolName(),SYMBOL_TRADE_TICK_SIZE),Prices[i],Symbol3.AdjustPrice(Prices[i])); } }
Para mostrar peguei três ativos com TickSize bem diferentes e ajustei os mesmos preços.
Resultado:
As outras 4 função são:
double PointsToPriceTPBuy(int point,double price); double PointsToPriceSLBuy(int point,double price); double PointsToPriceTPSell(int point,double price); double PointsToPriceSLSell(int point,double price);
Recebem dois argumentos:
(int) Point = Numero de pontos;
(double) Price = Preco de referencia (não precisa ser ajustado).
Retorna o preço ajustado em relação ao de referencia.
Exemplo:
double UPrice=658.32564; printf("Symbol: %s",Symbol1.GetSymbolName()); printf("TickSize: %f",SymbolInfoDouble(Symbol1.GetSymbolName(),SYMBOL_TRADE_TICK_SIZE)); printf("Unadjusted price: %f",UPrice); printf("Adjusted price: %f",Symbol1.AdjustPrice(UPrice)); printf("TakeProfit 10 points buy: %f",Symbol1.PointsToPriceTPBuy(10,UPrice)); printf("StopLoss 10 points buy: %f",Symbol1.PointsToPriceSLBuy(10,UPrice));
Resultado:
O ajuste polinomial por minimos quadrados tem como objetivo encontrar uma equação polinomial de grau N, que mais se aproxima de um conjunto de pontos tabelados. Caso o grau N seja igual a 1, esse polinomio será uma reta, podendo caracterizar esse ajuste como regressão linear.
Volume Normalize (correct it)Normalize (correct) the volume (lot) according to the symbol lot step
Painel modular que se adapta ao tamanho do grafico, em uma proporção desejada pelo usuário. O usuário pode adicionar quantos botões e textos quiser. Muito simples e facil de usar.
MartingaleEA simples para a execução de martingale