[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 441

 

Olá a todos!

Parece que não consigo obter a carga de depósito corretamente no relatório comercial. )) Eu faço isso:

#define RA 10000

if(Trade_Report == TRUE && !IsOptimization())
   {  int      pos;
      int      handle;
      int      Days;
      double   Swap_M;
      double   Profit_M;
      double   Swap_P;
      double   Profit_P;

      double   Source_LP[RA], LP_01[RA], LP_02[RA], LP_03[RA], LP_04[RA], LP_05[RA], LP_06[RA];
      double   Source_LP_02[RA], LP_01_02[RA], LP_02_02[RA], LP_03_02[RA], LP_04_02[RA], LP_05_02[RA], LP_06_02[RA];
      double   Source_SP[RA], SP_01[RA], SP_02[RA], SP_03[RA], SP_04[RA], SP_05[RA], SP_06[RA];
      double   Source_SP_02[RA], SP_01_02[RA], SP_02_02[RA], SP_03_02[RA], SP_04_02[RA], SP_05_02[RA], SP_06_02[RA];
      double   Load_Depo[RA]; 
   
      handle = FileOpen("OrdersReport.csv",FILE_CSV|FILE_WRITE);
   
      if(handle > 0)
                {//1
            FileWrite(handle,"Time Close"+","+"Lots"+","
                              +"Swap($)"+","+"Profit($)"+","+"Swap(p)"+","+"Profit(p)"+","+"Load Depo"+","
                              +"SOURCE_LP"+","+"LP#01"+","+"LP#02"+","+"LP#03"+","+"LP#04"+","+"LP#05"+","+"LP#06"+","
                              +"SOURCE_SP"+","+"SP#01"+","+"SP#02"+","+"SP#03"+","+"SP#04"+","+"SP#05"+","+"SP#06");
            for(pos = 0; pos < OrdersHistoryTotal(); pos++)
               {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); //2
               
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_Source_LP && OrderCloseTime() == TimeCurrent()) { Source_LP[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP01 && OrderCloseTime() == TimeCurrent()) { LP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP02 && OrderCloseTime() == TimeCurrent()) { LP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP03 && OrderCloseTime() == TimeCurrent()) { LP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP04 && OrderCloseTime() == TimeCurrent()) { LP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP05 && OrderCloseTime() == TimeCurrent()) { LP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP06 && OrderCloseTime() == TimeCurrent()) { LP_06[pos] = OrderProfit(); }
                     
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP && OrderCloseTime() == TimeCurrent()) { Source_SP[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP01 && OrderCloseTime() == TimeCurrent()) { SP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP02 && OrderCloseTime() == TimeCurrent()) { SP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP03 && OrderCloseTime() == TimeCurrent()) { SP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP04 && OrderCloseTime() == TimeCurrent()) { SP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP05 && OrderCloseTime() == TimeCurrent()) { SP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP06 && OrderCloseTime() == TimeCurrent()) { SP_06[pos] = OrderProfit(); }
                  
            //--- Вычисление загрузки депозита ---//
                  int              Amount_LD;
                  datetime         CurrentCloseTime = OrderCloseTime();
                  static datetime  CloseTime;                  
                  
                  if(CurrentCloseTime != CloseTime)
                     { Amount_LD = 1;
                       Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                       CloseTime = OrderCloseTime(); }
                  else if(CurrentCloseTime == CloseTime)
                          { Amount_LD++;
                            Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                            CloseTime = OrderCloseTime(); }
            //---------------------------------------------------------------------------------------------------------------------
                     
                  Swap_M     =  OrderSwap();
                  Profit_M   =  OrderProfit();
                  Swap_P     = (OrderSwap()/10)/OrderLots();
                  Profit_P   = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots();
                     
                  if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                     {   FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+DoubleToStr(OrderLots(),2)+"," //3
                                          
                                          +DoubleToStr(OrderSwap(),2)+","+DoubleToStr(Profit_M+Swap_M,2)+","+DoubleToStr(Swap_P,2)+","
                                          +DoubleToStr(Profit_P,2)+","+DoubleToStr(Load_Depo[pos],2)+","
                                          
                                          +DoubleToStr(Source_LP[pos],2)+","+DoubleToStr(LP_01[pos],2)+","+DoubleToStr(LP_02[pos],2)+","
                                          +DoubleToStr(LP_03[pos],2)+","
                                          +DoubleToStr(LP_04[pos],2)+","+DoubleToStr(LP_05[pos],2)+","+DoubleToStr(LP_06[pos],2)+","
                                             
                                          +DoubleToStr(Source_SP[pos],2)+","+DoubleToStr(SP_01[pos],2)+","+DoubleToStr(SP_02[pos],2)+","
                                          +DoubleToStr(SP_03[pos],2)+","
                                          +DoubleToStr(SP_04[pos],2)+","+DoubleToStr(SP_05[pos],2)+","+DoubleToStr(SP_06[pos],2));  } //3
               }  FileClose(handle); //2
         }//1

Como resultado, o cálculo inicial não é correto. Valores em array Load_Depo constantemente mudam e necessitam, que as posições em aberto também foram consideradas. Mostre-me um exemplo, alguém, se você tiver um minuto livre. ))

 
demlin:
Honestamente, eu não entendo, é tão complicado))))
Nem mesmo os exemplos do roteiro de teste ajudam?
 
FreeSerfer:

Obrigado, o ponto é claro, sinto muito por não ser muito bom com a linguagem de programação.

Suponha-se:

Azul - número 0 - comprar sinal

Vermelho - número 1 - sinal de venda

e outra pergunta, a seta pode piscar enquanto está formando uma barra acima da qual pode travar e dar um sinal. Os acordos devem ser abertos após a formação do sinal

Alguém pode implementar isto em código?

Você está estudando a programação ou procurando alguém para fazer isso para você?

Victor já explicou que a função iCustom() deve ser usada. Leia sobre isso na ajuda do MetaEditor. É bastante detalhado lá. Para evitar um "flutter" - utilizar no iCustom() os dados da primeira barra ao invés de zero - já foi completamente formado.

Quando você mesmo começar a escrever algo, você ficará feliz em receber ajuda e correção aqui...

 
artmedia70:

Você está aprendendo a programar ou está procurando alguém para fazer isso por você?

Victor já deixou claro para você que você precisa usar a função iCustom(). Leia sobre isso na ajuda do MetaEditor. É bastante detalhado lá. Para se livrar da "tagarelice" - usar os dados da primeira barra em vez da barra zero no iCustom() - ela já foi completamente formada.

Quando você mesmo começar a escrever pelo menos alguma coisa, então eles o ajudarão aqui com prazer e corrigirão qualquer coisa...

Eu mesmo escrevo, embora seja difícil para mim, e a única coisa que me resta é a ligação do Assessor Especialista ao indicador, embora graças ao Victor isso logo será resolvido com meus próprios esforços. Em todo caso, graças a todos os que responderam e me mostraram a direção a seguir.
 
peshihod:

Pode haver incontáveis opções. É melhor escolher as simples. Por exemplo:


int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Help.... Responda à pergunta ..............

Esta é a parte que é acionada em cada carrapato

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


E só deve ser acionado a cada nova ordem aberta, uma vez.

Talvez você precise adicionar algum contador, por carrapatos, magiks ou outros identificadores de pedidos?

----------------------------------------------------------------------------------------

Temos que criar uma Orderov variável?
Posso fazer desta maneira?

for(i=0;i<OrdersTotal();i++)

Você precisa de uma variável "k" no roteiro?

int i,k;

 
Zhunko:
Que mesmo os exemplos do roteiro de teste não ajudam?
Obrigado pelo feedback, contornou o problema de uma maneira diferente e mais simples ))
 
semiromid:

Esta é a parte que é acionada em cada carrapato

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


E deve ser acionado apenas uma vez com cada novo pedido aberto.

Talvez devesse haver um contador anexado, por carrapatos, magiks ou outro identificador de pedido?

----------------------------------------------------------------------------------------

Temos que fazer um Orderov variável?
Podemos fazer desta maneira ?

for(i=0;i<OrdersTotal();i++)

O roteiro precisa de uma variável "k" ?

Você entendeu tudo errado.

Você está tentando compor poesia em alemão sem saber uma palavra. Faço-me entender?

Leia a referência, aprenda todas as funções e propriedades do idioma. Vai levar alguns meses. Use os exemplos que estão incluídos na instalação do MetaTrader4. Depois falaremos. Você ainda não sabe do que estamos falando.

 
peshihod:

Você entendeu tudo errado.

Tentando compor poesia em alemão sem conhecer uma única palavra. Faço-me entender?

Leia a referência, aprenda todas as funções e propriedades do idioma. Vai levar alguns meses. Use os exemplos que estão incluídos na instalação do MetaTrader4. Depois falaremos. Você ainda não sabe do que estamos falando.


Sou um principiante em programação e não tenho professores. E se for difícil para você responder as perguntas que são importantes para mim, você não poderia ter me escrito nada.

E eu estou me dirigindo a você como você, na verdade.....

 
semiromid:


Sou um principiante em programação e não tenho professores. Se é difícil para você responder as perguntas que são importantes para mim, você não poderia ter me escrito nada.

E eu estou me dirigindo a você como você, na verdade.....


Sinto muito.

Eu escrevi sobre como você não pode aprender a nadar em terra.

 
peshihod:


Desculpe-me.

Eu escrevi sobre como você não pode aprender a nadar em terra.


Às vezes você tem que fazer perguntas para entender algo .

int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Help.... Responda à pergunta ..............

Esta é a parte que aciona cada carrapato.

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Ela só deve ser acionada cada vez que um novo pedido for aberto, uma vez.

Talvez eu precise anexar alguns contadores, por carrapatos, magiks ou outros identificadores de pedidos, ou talvez arrays? Eu não sei o que tem a ver com isso, não posso avançar até descobrir.

----------------------------------------------------------------------------------------

Temos que fazer um Orderov variável?
Posso fazer desta maneira?

for(i=0;i<OrdersTotal();i++)

O roteiro precisa de uma variável "k"?

int i,k;