Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 153

 
EVladMih:

Artemis, você começou do segundo post explicando ao homem que ele estava combinando branco com quente, e a única coisa que você explicou foi a parte da pergunta que ninguém lhe fez. Acontece que eu sei quanto código este homem escreveu, e foi VOCÊ quem não entrou no assunto, não ele. A propósito, este código ele não está escrevendo para si mesmo, mas para as pessoas.

Portanto, se você não quer ou não pode ajudar, pelo menos não interfira e não acuse os outros de seus pecados.

Homens que são mais conhecedores, por favor, ajudem o satorifx. Ele realmente precisa misturar o branco com o quente, mas não é culpa dele... Você conhece as especificidades do MT4, onde coisas da mesma ópera são cantadas em diferentes estágios (sistemas de coordenadas diferentes).

Antes de mais nada. Antes de mais nada, não estou falando com você pelo primeiro nome. Segundo - aprenda a ler corretamente o apelido de uma pessoa, já que você não pode usá-lo. Terceiro - Vou lhe dar uma dica sobre como identificar o cruzamento com a linha de tendência. No exemplo escrito especificamente para iniciantes, a linha de tendência em si não é utilizada para cálculos. É apenas uma pista em que direção mover-se. No entanto, existem muitos métodos para este problema. Não é necessário insistir no problema da incompatibilidade de coordenadas, mas decidir como sair da situação com os dados de entrada disponíveis.

И... isto... Eu posso escrever o que você ainda não sonhou...

 

EVladMih:,

mas provavelmente não se deve dividir as pessoas em casas de banho com base no local/não-local.

Não se trata de "local/não-local" de uma determinada pessoa. Trata-se da maneira como a pessoa faz a pergunta. Se me enganei na pergunta dele, isso não lhe dá o direito de ser rude. Eu sinceramente tentei ajudá-lo. E acho que se ele tivesse me dito após minha resposta que isto não é o que ele queria e pediu, e explicado a tarefa específica que lhe foi dada, teríamos descoberto como fazer tudo de forma rápida e eficiente.

Agora você está falando de como ele não consegue identificar o cruzamento com a linha de tendência. Mas isso só faz você sorrir. Ou talvez eu tenha entendido tudo errado novamente e mereça outra grosseria? A função ObjectGetValueByShift() simples retornará o preço da linha de tendência em uma determinada barra. Portanto, compare um preço com outro.

 
artmedia70:
Tanto quanto sei, ele quer que o objeto seja posicionado verticalmente e não deslocado horizontalmente ao menor preço de barras que são visíveis na tela. Mostrei a ele a primeira parte de sua pergunta - como encontrar o preço mínimo na tabela. Ele não entendeu e ladrou para mim. Agora deixe-o procurar por si mesmo como fazer o que precisa sem cruzar dois sistemas de coordenadas. Isto é fácil. Talvez outra pessoa o faça por ele, mas eu me retiro. Eu não gosto de pessoas rústicas e de carga livre - ele nem mesmo se preocupou em investigar o assunto e escrever algo em código ele mesmo.

artmedia70, eu sou uma pessoa não conflituosa e se eu disse algo errado, peço desculpas e peço que isso não seja considerado rude.

Eu realmente não sei como resolver o problema.

Cruzei 2 sistemas de coordenadas até agora de uma maneira simples: fiz uma etiqueta e a coloquei manualmente no preço mínimo - então eu tenho uma etiqueta coordenada Y e ela corresponde ao preço mínimo, que eu recebo com a função WindowPriceMin() . Mas é manual, eu gostaria de rastreá-lo e corrigi-lo de forma programática.

Se realmente existe uma solução para isto, e uma solução simples, eu ficaria grato pela ajuda.


 
artmedia70:

Agora você está dizendo que ele não pode detectar um cruzamento com a linha de tendência. Mas isso só me faz sorrir. Ou será que entendi tudo errado novamente e mereço outra grosseria? A função ObjectGetValueByShift() simples retornará o preço da linha de tendência em uma determinada barra. Portanto, compare um preço com outro.


Não dê ouvidos a EVladMih - ele não está fazendo nenhum sentido .
Eu sei muito bem como encontrar a distância para a tendência quando se trata de preço. A questão é diferente.

Uso marcadores em meu indicador que ficam pendurados permanentemente na parte superior da tela. É após o deslocamento de qualquer marcador que a distância do marcador para a linha de tendência deve ser determinada, mas as marcas têm coordenadas (x,y) na tela, enquanto ObjectGetValueByShift trabalha com o preço, ou seja, em outro sistema de coordenadas. Foi daí que veio todo o alvoroço.

Não posso usar o objeto OBJ_TEXT com coordenadas de preço, porque quero que ele fique em um lugar, como fazem as etiquetas ( objeto OBJ_LABEL), se eu mover o gráfico, ao invés de etiquetas.

 
satorifx:

Não escute EVladMih - ele escreve besteiras .
Eu sei muito bem como encontrar a distância para a tendência quando se trata de preço. A questão é diferente.

Em meu indicador uso marcadores que estão constantemente pairando na parte superior da tela. É após o deslocamento de qualquer marcador que a distância do marcador para a linha de tendência deve ser determinada, mas as marcas têm coordenadas (x,y) na tela, enquanto ObjectGetValueByShift trabalha com preço, ou seja, em outro sistema de coordenadas. Foi daí que veio todo o alvoroço.

Quero dizer antecipadamente que não posso usar o objeto OBJ_TEXT com coordenadas de preço em vez de etiquetas, porque quero que elas (etiquetas) não sejam deslocadas para o preço se eu mover o gráfico, mas que fiquem em um só lugar, como fazem as etiquetas ( objeto OBJ_LABEL).

Para evitar ter que lidar com recálculos, use ARROW com constante x-coordenada = barra particular em vez de rótulos. Você pode armazenar e modificar a barra na descrição do objeto. Assim que o objeto for movido, escreva uma nova coordenada x igual à nova barra em sua descrição. Então não haverá nenhum problema com a pesquisa de preços. E sempre localizar o objeto por sua descrição no eixo horizontal. O eixo vertical é o preço. Esta é uma opção menos dispendiosa. E o objeto estará sempre no eixo x no mesmo local, correspondendo a um determinado número de barra.

ZS "...minhas desculpas e, por favor, não o tomem como um tolo..." Tudo bem, deixe ir... ;)

 

Eu inventei um indicador. Divide um par por outro, para obter instrumentos não incluídos no terminal. Mas agora ele carrega o terminal e recalcula a cada tick. Entrei nela como em meu consultor especializado

se (Time[0]<=PrevTime) retornar(0);

PrevTime=Time[0];

Agora, ela só se baseia em uma vela nova. Por favor, me diga como fazê-lo. Texto do indicador.

P/S/ A propósito. Todos os pares são mostrados normalmente. Eu quero ver Aplicar a Ruble. Eu não quero ver isso.

#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 1
#indicador de propriedade_color1 Lime
//--- parâmetros de entrada
String externo Paar_1="EURUSD"; // Símbolo desejado para comparação
corda externa Paar_2="GBPUSD"; // instrumento desejável para comparação
espelhamento_Paar_2=falso;
//--- amortecedores
duplo ExtMapBuffer1[];
estática int PrevTime=0;
int start=1;


//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
string short_name=Paar_1;
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int start()
{
se (Time[0]<=PrevTime && start====1) retornar(0);
PrevTime=Time[0];
int i, counted_bars=IndicatorCounted();
i=counted_bars-1;
//----
while(i>=0){
double Compare1=iClose(Paar_1,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE));
double Compare2=iClose(Paar_2,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE));
if(Compare2!=0 && Compare1!=0) double Compare=Compare1/Compare2;
if(Mirroring_Paar_2===1) Compare=1/Compare;

ExtMapBuffer1[i]=Compare;
RefreshRates();
i--;
}
//----
start=0;
retorno(0);
}
//+------------------------------------------------------------------+y

 
Olá
Ajuda! Como fazer um atraso entre as aberturas de pedidos, Sleep 3000?
int start() {
string ls_0;
int li_8;
bool li_12;
int li_20;
int li_24;
double ld_28;
int li_36;
int li_40;
string ls_48;
string ls_56;
string ls_64;
double ld_76;
int li_84;
E é assim que você deve colar

Só no caso da própria coruja

Outra pergunta, esta coruja está definida para sete pares ao mesmo tempo, eu preciso especificamente fazer uma pausa entre as ordens de abertura! Por exemplo, hoje 10 pedidos foram abertos simultaneamente nas notícias e eu preciso deles com um atraso!

Obrigado!

/* Descompilado excluído - Vinin */

 

Acabo de me lembrar, você pode me dizer onde inserir Sleep(60000); para que houvesse um atraso entre as aberturas

if (ai_8 == OP_BUY) ad_20 = Ask;
if (ai_8 == OP_SELL) ad_20 = Bid;
if (!IsTradeContextBusy()) {
li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64)
if (li_68 > 0) {
Print("orderSendReliable(): Sucesso! Ingresso: " + li_68);
retorno (li_68);
}



 

Você o roubou, mas não tem idéia do que fazer com ele))

não escrevi nenhum conselheiro para mim, apenas li, examinei corujas tortas em seus esquemas de blocos, tentando entender a melhor abordagem

portanto, posso estar errado.

int counterrore=0, //подщет количества ошибок открытия ордера
timesleep=10000; // время задержки
while () // до тех пор пока не будет выход с цыкла
{
 if (!IsTradeContextBusy())
 { 
  RefreshRates(); // последние данные
  if (ai_8 == OP_BUY) ad_20 = Ask;
  if (ai_8 == OP_SELL) ad_20 = Bid;
  li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
  MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64);
  if (li_68 > 0) 
  {
   Print("orderSendReliable(): Success! Ticket: " + li_68);
   return (li_68);
  }
  Print("orderSendReliable(): False! Error " + GetlastError()); // поищите коректную функцию обработки ошибок
  counterrore++; // количество неудач - сумирование

  if(counterrore>6) // если не удалось 6 раз открыть
  {
   Print("orderSendReliable(): Error!!! " +counterrore+"times --return(-1)" ); // сообщаем логу о даной трагедии
   return (-1); // -1 или что там Вы придумаете для отработки ситуации
  }
 }
 Sleep (timesleep); // время сна для цикла посылки  запроса на сервер и для !IsTradeContextBusy()
}
 
Agora os moderadores virão e banirão os dois últimos à minha frente :-))