//+------------------------------------------------------------------+ //| SuperCharlie_Aldridge_Dev_v0.mq5| //| HEDGING HORN CAPITAL | //| https://www.hhcapital.com.br | //+------------------------------------------------------------------+ #property copyright "HEDGING HORN CAPITAL" #property link "https://www.hhcapital.com.br" #property version "DEV_v0" #property description "INDICE" //INDICE //+===================================================================================================================================================================================+ //| 1 - SESSAO DE CABECALHO / ADMISSAO //+===================================================================================================================================================================================+ //+------------------------------------------------------------------+ //| 1.1 - IMPORTACOES | //+------------------------------------------------------------------+ #include "MarketBook.mqh" #include "S1_Admissao1_v0.mqh" //SLOTS_i,q = -Φ*k*q^2 , i=q //SLOTS_i,q = λc/e , i=q-1 //SLOTS_i,q = λv/e , i=q+1 //SLOTS_i,q = 0 , default //+===================================================================================================================================================================================+ //| 5 - SESSAO DE PRECOS / DIRECAO //+===================================================================================================================================================================================+ //+------------------------------------------------------------------+ //| 5.1 - FUNCAO QUE VERIFICA O PRECO NAQUELE INSTANTE | //+------------------------------------------------------------------+ int VerificaPreco(double tickMin, int i, fluido &Fluidos, int ponta, slot &Slots[], posicao &SlotPos, bool chavePos) { //Calcula os spreads //Ordem (Child Order) if(chavePos == false) { if(ponta == 0) Fluidos.precoMedioC = CalculaSpreadBuy(tickMin, i, Fluidos, Slots); else Fluidos.precoMedioV = CalculaSpreadSell(tickMin, i, Fluidos, Slots); } //Position (Parent Order) else if(chavePos == true) { CalculaAlteraPosicao(tickMin, Fluidos, SlotPos); } return 0; } //+------------------------------------------------------------------+ //| 5.2 - FUNCAO QUE CALCULA SPREAD BUY | //+------------------------------------------------------------------+ double CalculaSpreadBuy(double tickMin, int i, fluido &Fluidos, slot &SlotsC[]) { double spreadB = 0.0; switch(i) { case 0 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 - 0.25*5)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; // Print("Envio preenchido: ", SlotsC[i].precoEnvio,"TP preenchido: ", SlotsC[i].precoAlvo,"SL: ", SlotsC[i].precoStop); break; case 1 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 + 0.25*5)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; case 2 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 - 0.25*3)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; case 3 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 - 0.25*2)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; case 4 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 - 0.25*1)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; case 5 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; case 6 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 + 0.25*1)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; case 7 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 + 0.25*2)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; case 8 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 + 0.25*3)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; case 9 : SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5 + 0.25*4)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; default: SlotsC[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend - (2.5)*Fluidos.sigmaLFT - tickMin/2; SlotsC[i].precoAlvo = SlotsC[i].precoEnvio + tickMin*10; SlotsC[i].precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; break; } return spreadB; } //+------------------------------------------------------------------+ //| 5.3 - FUNCAO QUE CALCULA SPREAD SELL | //+------------------------------------------------------------------+ double CalculaSpreadSell(double tickMin, int i, fluido &Fluidos, slot &SlotsV[]) { double spread = 0.0; switch(i) { case 0 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 - 0.25*5)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 1 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 + 0.25*5)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 2 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 - 0.25*3)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 3 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 - 0.25*2)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 4 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 - 0.25*1)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 5 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 6 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 + 0.25*1)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 7 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 + 0.25*2)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 8 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 + 0.25*3)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; case 9 : SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5 + 0.25*4)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; default: SlotsV[i].precoEnvio = Fluidos.media + Fluidos.driftLFTTend + (2.5)*Fluidos.sigmaLFT + tickMin/2; SlotsV[i].precoAlvo = SlotsV[i].precoEnvio - tickMin*10; SlotsV[i].precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; break; } return spread; } //+------------------------------------------------------------------+ //| 5.4 - FUNCAO QUE CALCULA ALTERACAO DE PRECOS DA POSICAO | //+------------------------------------------------------------------+ void CalculaAlteraPosicao(double tickMin, fluido &Fluidos, posicao &SlotPos) { Print("Entrou no Altera Posicao"); //Se for posicao de compra if(SlotPos.ponta == POSITION_TYPE_BUY) { SlotPos.precoAlvo = SlotPos.precoMedio + 0.4*Fluidos.sigmaLFT; SlotPos.precoStop = Fluidos.media - 5*Fluidos.sigmaLFT; } else if(SlotPos.ponta == POSITION_TYPE_SELL)//Senao eh posicao de venda { SlotPos.precoAlvo = SlotPos.precoMedio - 0.4*Fluidos.sigmaLFT; SlotPos.precoStop = Fluidos.media + 5*Fluidos.sigmaLFT; } return; } //+------------------------------------------------------------------+ //| 5.5 - FUNCAO QUE CALCULA A MEDIA DE PRECOS | //+------------------------------------------------------------------+ void GetPrecosPassados(MqlTick &ArrayTick[], double &precos[], int T) { if(CopyTicks(Symbol(),ArrayTick,COPY_TICKS_TRADE,0,T) != -1) { ArraySetAsSeries(ArrayTick,true); for(int i=0;i