[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 452

 

Caros programadores. por favor, ajudem-me a escrever um código com o seguinte princípio - BUY Signal - abrir BUY 1position.SL.TP.transfer para Breakeven

Sinal de VENDA - abrir posição SELL 1. SL.TP.transferência para sem perdas . BUY- se houver uma posição aberta BUY 1 e SELL 1, nós abrimos BUY 2. VENDER sinal - se houver posições abertas COMPRAR 1 e COMPRAR 1 então abrimos VENDER 2. COMPRAR sinal - se houver posições em aberto VENDER 1. COMPRAR 1. VENDER 2. depois fechar VENDER 2. abrir COMPRAR 2. Sinal de VENDA - se houver aberto COMPRAR 1. VENDER 1. COMPRAR 2. depois fechamos COMPRAR 2. abrir VENDER 2. O mercado não deve funcionar mais que 3 ordens. se alguém puder ajudar, muito obrigado.

 
Sepulca:

Não se preocupe com matrizes dinâmicas, especifique com antecedência, com uma reserva, ou você não tem memória suficiente?

Minha memória é aceitável, mas não é essa a questão aqui :)

Para que serve especificar uma matriz com um número potencialmente enorme de elementos, se haverá muitas vezes menos elementos?

Afinal, ao criar uma matriz, ela já ocupará parte da memória operacional.

 
ilunga:
exatamente

Eu modifiquei um pouco o roteiro:

//+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][6];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][6];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1=ArrayCopyRates(array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY);               //копируем данные всех баров в пользовательский массив
   bool element_3=ArrayGetAsSeries(array2);                              //проверка: является ли массив array1 массивом-таймсерией
   bool try_1=ArraySetAsSeries(array2,false);                            //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4=ArrayGetAsSeries(array2);                              //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[0][1];                                          //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
           MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
           " миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

O resultado é o seguinte:


Uma pergunta surgiu naturalmente: Neste caso, copiei dados de barras no gráfico atual em uma matriz bidimensional1 usando a função ArrayCopyRates(array1). Então na próxima linha com a função ArrayCopy(array2,array1,0,0,0,WHOLE_ARRAY) eu copiei os dados do array1 em array2. Então, usando a função ArrayGetAsSeries, eu verifiquei se array2 é uma array-timeseries. E verificou-se (como você pode ver na imagem da tela), que a matriz é uma matriz de série temporal, embora eu não a tivesse "processado" com a função ArraySetAsSeries antes.

Pergunta: por que no primeiro caso (pergunta anterior) eu precisava usar a função ArraySetAsSeries (para fazer minha array ser organizada como uma array de timeseries), enquanto neste caso eu não preciso de tal processamento.

P.S. Desculpe a insistência, só quero entendê-la plenamente, para que não fiquem "lacunas na história". Obrigado por todas as respostas anteriores.

 

Não consigo entender, ou sou burro ....

Em teoria deveria ser 0,3, mas por alguma razão é 0,00 ....

  Comment(3/10);

Também dá 0... Então, como obter números fracionários ?????

int start()
  {
double t;
t=3/10;
   Comment(t);

   return(0);
  }

também zero ....

Não sei que tipo de pandeiro saltar com .......

 
VOLDEMAR:

Não consigo entender, ou sou burro ....

Em teoria deveria ser 0,3, mas por alguma razão é 0,00 ....

Também dá 0... Então, como obter números fracionários ?????

também zero ....

Não sei que tipo de pandeiro saltar com .......

Ler a documentação 3 vezes ao dia durante 4-5 horas. E só então saltar com um tamborim.

3.0/10.0

 

Você tem alguma idéia do porquê?

Talvez devêssemos fazer livros didáticos adequados ???

Talvez fazer treinamento adequado????

Talvez você devesse escrever estas coisas em algum lugar?

Talvez então as perguntas desapareçam?

E você não terá que responder mais 100500 perguntas estúpidas!

Se existem tais perguntas, a culpa não é do estudante, a culpa é sua! Você não o descreveu em nenhum lugar!!!

Não está escrito na ajuda, não está escrito como traduzir de int para double.

mas diz que se você atribuir o tipo duplo ao int, a parte fracionária será apagada,

Uma pessoa normal concluiria logicamente que se o int for atribuído ao dobro, apenas um ponto com um determinado número de zeros será adicionado...

Assim, é assim ....

 
Roger:

Substitua

para


Muito obrigado, eu vou experimentar!
 
VOLDEMAR:

Alguma idéia do porquê ????
Talvez devêssemos fazer tutoriais adequados.
Talvez fazer um ensino adequado?


Estas perguntas não são para mim. Sou um usuário, assim como você.

Talvez você devesse escrever estas coisas em algum lugar.

Bem, eu lhe mostrei onde diz.

Talvez então as perguntas desapareçam ????

Não, eles não desaparecerão. Asseguro-lhe.

E você não terá que responder mais 100500 perguntas estúpidas!
Se existem tais perguntas, a culpa não é do estudante, a culpa é sua! Você não o descreveu em nenhum lugar!!!

Estas perguntas não são para mim. Sou um usuário, assim como você.

Não está escrito na ajuda, não está escrito como traduzir de int para double.
mas diz que se você atribuir o tipo duplo ao int , então a parte fracionária será apagada,

uma pessoa normal teria logicamente a idéia lógica de que quando você atribui um número int a um número duplo, então apenas um ponto com um determinado número de zeros será adicionado...


Sim. A tarefa funciona nos dois sentidos.

Exceto que você não incorporou mais sua lógica.

Se você quisesse ser lógico, não poderia fazer duas coisas ao mesmo tempo. Primeiro você deve ter atribuído um número ao dobro e só depois dividi-lo por outro número. Mas é o contrário. Mais cedo ou mais tarde você teria chegado a ele.

 
VOLDEMAR:

Você tem alguma idéia do porquê?

Talvez devêssemos fazer livros didáticos adequados ???

Talvez fazer um ensino adequado ????

Talvez escrever estas coisas em algum lugar?

Talvez então as perguntas desapareçam?

E você não terá que responder mais 100500 perguntas estúpidas!

Se existem tais perguntas, a culpa não é do estudante, a culpa é sua! Você não o descreveu em nenhum lugar!!!

Não está escrito na ajuda, não está escrito como traduzir de int para double.

mas diz que se você atribuir o tipo duplo ao int, a parte fracionária será apagada,

Uma pessoa normal concluiria logicamente que se o int for atribuído ao dobro, apenas um ponto com um determinado número de zeros será adicionado...

Assim, é assim ....

Vladimir, você tem o direito de expressar toda essa histeria ao suporte técnico do terminal que você compra. E enquanto você estiver usando um terminal gratuito, você pode agradecer àqueles entusiastas que descobriram isso por conta própria e aos ociosos como você que nem sequer querem gastar tempo para procurar materiais no site e ainda estão respondendo algo pela centésima vez. Ninguém lhe deve nada. Eles estão tentando fazer isso por conta própria. Se você quiser que eles o incomodem, contrate um instrutor e mexa com sua cabeça. Ele lhe dará um boneco e um babete.

Razão: