[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 642

 
gordeef:

Sou cuidadoso com as reversões e correções como está. Mas em relação ao esgotamento da tendência, também estou interessado nele, percorri o fórum e olhei a CodeBase, mas não encontrei nenhum índice sobre este tópico. Será interessante ler seus resultados. Tenho outra pergunta, eles me enviaram um EA que controla minhas perdas e lucros, como na foto deveria funcionar, mas a pergunta é, ele tem um lucro de 15 pontos e o preço pode subir ainda mais, se eu aumentar o lucro em uma negociação, ele pode quebrar os cálculos gerais e o funcionamento do EA?
Acho que a resposta a esta pergunta pode estar nas entranhas do meu Conselheiro Especialista. Talvez seja respondido por um dos camaradas muito mais experientes. Penso que a resposta deles será mais válida a partir de sua experiência - eu sou apenas um principiante... :)
 
artmedia70:

OK. Obrigado, Victor. Até agora, está funcionando corretamente. Até agora, porque não o tenho seguido há muito tempo, mas NUNCA o tive como resultado Trend Up para mim antes. É agora:


Eu sabia que sempre havia um feiticeiro-mago mais poderoso para um feiticeiro-queridinho. :)

Está tudo em brincadeira, é claro, mas... Victor, não quero apenas copiar cegamente a solução certa, e descobrir e entender onde o cão está escondido, qual é a essência do problema e este comportamento incompreensível para mim em código?


Problemas de lógica. Não mais do que isso. Tente diagramas de blocos de desenho. Ajuda
 

Tenho outra pergunta: no início eu estava fazendo N número de linhas, mas depois percebi que uma delas seria supérflua e seria mais apropriado colocá-la entre parênteses na forma de porcentagem numérica, então eu a removi e a coloquei ao lado daquela onde só havia espaço para ela:

Foi assim no início:


E é assim que as coisas são agora:


Estou assombrado por ecos de eventos passados... Quando a EA é lançada pela primeira vez, antes de um novo tick chegar, ela sempre exibe o que era originalmente... Embora não esteja no código há muito tempo. De onde vêm os fantasmas????

 
artmedia70:

Outra pergunta surgiu: no início eu estava fazendo uma série de linhas, mas depois percebi que uma delas seria supérflua e seria mais apropriado colocá-la entre parênteses na forma de porcentagem numérica, então eu a removi e a coloquei ao lado daquela em que havia o lugar certo para ela:

Foi assim no início:


E é assim que as coisas são agora:


Estou assombrado por ecos de eventos passados... Quando a EA é lançada pela primeira vez, antes de um novo tick chegar, ela sempre exibe o que era originalmente... Embora não esteja no código há muito tempo. De onde vêm os fantasmas????





Você tem que olhar para o código. Desmontar a lógica.
 
Vinin:

Problemas lógicos. Nada mais. Tente diagramas de blocos de desenho. Ajuda

:):) Obrigado... Eh... Já tenho um "tartan" tão espalhado no meu chão... Mamma mia! Não parece haver muita lógica nas três linhas. Acontece que quando você verifica: se o 1º, então o faça, se você não fizer o 1º, é claro que o 2º vem em seguida. Se o 2º falhar, o 3º segue-se.

Não... É assim: se é o 1º, então é assim... Caso contrário, se o 2º, fazemos so-c, caso contrário, se não o 1º e o 2º, fazemos o 3º, se não o 1º, não o 2º e não o 3º, então procuramos erros de lógica...

Oh... Eu mesmo estou completamente confuso... Bem, Victor, sua adição se comporta corretamente e agora vou tentar entender porque preciso de mais um operador que parece estar naquele lugar onde esse "caso contrário" ocorre de qualquer maneira, depois de ter atormentado meu cérebro...

Obrigado pelo conselho.

 
Vinin:

Você tem que olhar para o código. Para resolver a lógica.

Não há quase nenhuma lógica - a simples saída de linhas em ordem, uma após a outra.

/--------------------------------------------------------------- 1 --
// Функция вывода на экран графических сообщений.
//--------------------------------------------------------------- 2 --
  int Informations()
  {
   int   Win_ind;                     // Номер окна индикатора
   int   x,y;
   
   trH4     =Trend_PSAR(NULL,240);  // Четырёхчасовой тренд
   trH1     =Trend_PSAR(NULL,60);   // Часовой тренд
   trM30    =Trend_PSAR(NULL,30);   // Получасовой тренд
   trM15    =Trend_PSAR(NULL,15);   // 15-ти минутный тренд

//--------------------------------------------------------------- 3 --
   Win_ind= WindowFind("Info");        // Ищем номер окна индикатора
   if (Win_ind<0)return;               // Если такого окна нет, уходим
//--------------------------------------------------------------- 4 --
   x =10; y =17;
   ObjectCreate("Equ",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Equ",OBJPROP_XDISTANCE,x);
   ObjectSet("Equ",OBJPROP_YDISTANCE,y);
   ObjectSetText("Equ",    "Свободные средства",9,"Tahoma",Gold);
   
   ObjectCreate("EquVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("EquVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("EquVal",OBJPROP_YDISTANCE,y);
   ObjectSetText("EquVal",DoubleToStr(Equ_NEW,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("Prof",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Prof",OBJPROP_XDISTANCE,x);
   ObjectSet("Prof",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("Prof",   "Уровень фиксации прибыли (      %)",9,"Tahoma",Gold);
   
   ObjectCreate("ProfVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ProfVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("ProfVal",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("ProfVal", DoubleToStr(Equ_OLD+EquPerc,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------    
   ObjectCreate("Perc",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Perc",OBJPROP_XDISTANCE,x*18);
   ObjectSet("Perc",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("Perc", DoubleToStr(PercentEquityForClose,1),9,"Tahoma",Yellow);
   
//--------------------------------------------------------------------   
   ObjectCreate("Tral",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Tral",OBJPROP_XDISTANCE,x);
   ObjectSet("Tral",OBJPROP_YDISTANCE,y*3);
   ObjectSetText("Tral",   "Уровень включения трала",9,"Tahoma",Gold);
   
   ObjectCreate("TralVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TralVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("TralVal",OBJPROP_YDISTANCE,y*3);
   ObjectSetText("TralVal", DoubleToStr(Equ_OLD-EquPerc,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("Wloss",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Wloss",OBJPROP_XDISTANCE,x);
   ObjectSet("Wloss",OBJPROP_YDISTANCE,y*4);
   ObjectSetText("Wloss",  "Порог выставления безубытка",9,"Tahoma",Gold);
   
   ObjectCreate("WlossVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("WlossVal",OBJPROP_YDISTANCE,y*4);
   ObjectSetText("WlossVal", DoubleToStr(LevelProfit,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("WlossPP",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossPP",OBJPROP_XDISTANCE,x);
   ObjectSet("WlossPP",OBJPROP_YDISTANCE,y*5);
   ObjectSetText("WlossPP","Размер безубытка в пунктах",9,"Tahoma",Gold);
   
   ObjectCreate("WlossPPVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossPPVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("WlossPPVal",OBJPROP_YDISTANCE,y*5);
   ObjectSetText("WlossPPVal",DoubleToStr(LevelWLoss,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("ATR",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ATR",OBJPROP_XDISTANCE,x);
   ObjectSet("ATR",OBJPROP_YDISTANCE,y*6);
   ObjectSetText("ATR",    "Волатильность рынка",9,"Tahoma",Gold);
   
   ObjectCreate("ATRVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ATRVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("ATRVal",OBJPROP_YDISTANCE,y*6);
   ObjectSetText("ATRVal", DoubleToStr(VolATR,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("TP",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TP",OBJPROP_XDISTANCE,x);
   ObjectSet("TP",OBJPROP_YDISTANCE,y*7);
   ObjectSetText("TP",     "Размер Take Profit",9,"Tahoma",Gold);
   
   ObjectCreate("TPVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TPVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("TPVal",OBJPROP_YDISTANCE,y*7);
   ObjectSetText("TPVal", DoubleToStr(TPatr,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("trH4",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trH4",OBJPROP_XDISTANCE,x);
   ObjectSet("trH4",OBJPROP_YDISTANCE,y*9);
   
   ObjectCreate("ArrowH4",OBJ_LABEL,Win_ind,0,0,0,0);
   ObjectSet("ArrowH4",OBJPROP_XDISTANCE,x*8);
   ObjectSet("ArrowH4",OBJPROP_YDISTANCE,y*9);

   if (trH4==1)
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",Lime);
         ObjectSetText("ArrowH4",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",Lime);
      }
   else if (trH4==-1)
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowH4",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",LightGray);
         ObjectSetText("ArrowH4",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trH1",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trH1",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trH1",OBJPROP_YDISTANCE,y*9);
   
   ObjectCreate("ArrowH1",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowH1",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowH1",OBJPROP_YDISTANCE,y*9);
   
   if (trH1==1)
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",Lime);
         ObjectSetText("ArrowH1",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",Lime);
      }
   else if (trH1==-1)
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowH1",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",LightGray);
         ObjectSetText("ArrowH1",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trM30",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM30",OBJPROP_XDISTANCE,x);
   ObjectSet("trM30",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM30",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM30",OBJPROP_XDISTANCE,x*8);
   ObjectSet("ArrowM30",OBJPROP_YDISTANCE,y*10);
   
   if (trM30==1)
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",Lime);
         ObjectSetText("ArrowM30",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",Lime);
      }
   else if (trM30==-1)
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM30",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",LightGray);
         ObjectSetText("ArrowM30",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM15",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trM15",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM15",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowM15",OBJPROP_YDISTANCE,y*10);
   
   if (trM15==1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",Lime);
         ObjectSetText("ArrowM15",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",Lime);
      }
   else if (trM15==-1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM15",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else if (trM15==0)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
/*
   else
      {
         ObjectSetText("trM15","Хрен вам",9,"Tahoma",LightGray);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",LightGray);
      }
*/
//--------------------------------------------------------------------   
   

//--------------------------------------------------------------------   
   WindowRedraw();                      // Перерисовываем все объекты
   return;
  }
//--------------------------------------------------------------- 9 --
 

Pessoas, por favor, compartilhem os modelos prontos, funcionando (não com falhas) do Expert Advisor, para que só seja possível mudar a estratégia comercial, com a possibilidade de fechar a posição aberta para a posição oposta, se necessário (reversão, mas para que a compra/venda na condição não seja através de outra forma, mas com a possibilidade de prescrever separadamente as condições:

se condição para comprar
{
Opn_B=true; // Aberto Crit. de compra
Cls_S=true; // Fechar Crit. de venda. Vender
}
se condição para vender
{
Opn_S=verdadeiro; // Critério aberto Vender
Cls_B=verdadeiro; // Critério fechado Comprar Critério de compra
} ), ou TP/SL para fechar a posição.

Estou perdendo a cabeça, estou lutando com isso há um mês. Não posso mover estratégias comerciais de Omega para MT, algum tipo de amortecedores/ schmuffers, arrays farfetados e blocos de contabilidade, abertura/fechamento e contabilidade de erros em um EA.

Agradecemos antecipadamente a todos que responderam.

 
Craft:

Pessoas, por favor, compartilhem os modelos prontos e funcionais de uma EA, para que você só possa mudar a estratégia comercial, com a capacidade de fechar uma posição aberta no lado oposto (reversão), ou por TP/SL, se necessário.

Estou dando a volta a minha cabeça com a contabilidade de pedidos, blocos de abertura/fechamento e contabilidade de erros.

Eu lhe darei a resposta, porque tenho "suado" por muito tempo - somente quando testar estratégias e mudá-las rapidamente, você poderá deixar as ordens fora do jogo, e arquivar as ordens e os erros também. Basta copiar o que ele tem no livro didático e deixá-los ser. Trabalhe somente com Trade() e Criterion(), se você estiver seguindo o tutorial de Sergei Kovalev. Critério() - para encontrar pontos de entrada para suas estratégias, Comércio() - para abrir/fechar posições. Trabalhar com eles e mudá-los é suficiente para testar estratégias. E então, uma vez que você seja bom em programação, você chegará a suas próprias funções, porque você entenderá para que tudo isso serve e como tudo isso funciona...
 
artmedia70:
Responderei, porque eu mesmo tenho "lutado" com isto por muito tempo - somente para testar estratégias e mudá-las rapidamente você pode deixar a contabilidade de pedidos fora da equação, e colocar a contabilidade de erros também na prateleira. Basta copiar o que ele tem no livro didático e deixá-los ser. Trabalhe somente com Trade() e Criterion(), se você estiver seguindo o tutorial de Sergei Kovalev. Critério() - para encontrar pontos de entrada para suas estratégias, Comércio() - para abrir/fechar posições. Trabalhar com eles e mudá-los é suficiente para testar estratégias. E então, tendo dominado a programação, você chegará a suas próprias funções, porque compreenderá para que serve tudo isso e como tudo isso funciona...

Obrigado, tenho tudo testado, quero tentar negociar via MT para realmente levar em conta as ordens e as posições abertas/fechadas com correções de saldo, se necessário.
 
Vinin:

Você tem que olhar para o código. Desmontar a lógica.

O código para o indicador mais vazio... onde também não há nada...

 
#property indicator_separate_window
#property indicator_minimum 1
#property indicator_maximum 10
 
bool initFinished=false;
// добавляем переменную, которая будет запоминать состояние инициализации.
// false - инициализации еще не было
// true - была
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   ObjectsDeleteAll();
   // удаляем все объекты
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(initFinished==false)
   {
      IndicatorShortName("Info");
 
      int winID=WindowFind("Info");
   
      if(winID<0)
      {
         // если номер подокна равен -1, то возникла ошибка
         Print("Чёт не могу твоего окошечка найти, пошел я отсюдова");
         return(0);
      }  
//------------------------ Тут можно рисовать ------------------------- 
 
// ----------------------- Но не нужно... ----------------

//------------------------------------------------------------------------- 
      WindowRedraw();      
            
      initFinished=true;
     
   }
   
   return(0);
}
Razão: