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 537

 
VoDyaMon:

Se você escreve um script simples que cria um objeto do tipo OBJ_ARROW_RIGHT_PRICE e depois o apaga, o objeto não é apagado. Além disso, o comando ObjectType revela subitamente que o objeto criado não é do tipo OBJ_ARROW_RIGHT_PRICE (===36), mas ==22, ou seja, uma simples "seta para cima" !!! Eu sou o único que tem isto ou todos têm isto?

Já existiam opiniões de "especialistas" sobre este assunto: como ler a ajuda, ou não ter memória suficiente :) .

A memória é suficiente.

Parece que o comando ObjectCreate desenha um objeto do tipo OBJ_ARROW_RIGHT_PRICE , que não pode ser removido pelo comando ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE), mas pode ser removido pelo comando ObjectsDeleteAll(0,22), como se não tivéssemos a etiqueta de preço correta, mas uma "seta para cima". De quem é a culpa?

... ... ...

Para excluir um objeto do tipo OBJ_ARROW_RIGHT_PRICE use o comando ObjectsDeleteAll(0,OBJ_ARROW), com indicação obrigatória de subjanela.

p.s. Um objeto do tipo OBJ_ARROW é "seta" qualquer, não apenas "seta para cima". ObjectCreate(...OBJ_ARROW...) cria imediatamente uma "seta para cima". Qual é a confusão sobre o porquê de não estar na ajuda?

Escreva neste tópico. Ao menos os desenvolvedores estão lá.
 

Há um roteiro:

#property show_confirm;
int slip=5;

void start()
{
  for(int i=OrdersTotal()-1;i<=0;i--)
  {
   int p=0; double price=0;
      if(OrderSelect(i,SELECT_BY_POS))
     {
       switch(OrderType())
        {
         case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
         case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
         default: break;
        }
         while(p<5)                              
           {                                    
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==true) 
               break;                   
            else                              
              {
               p++;                              
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(1000);                       
              }
           }
     }
 }
}

O que nem sequer tenta fechar uma única ordem de mercado atualmente aberta. Por quê?

Ele não escreve nenhum erro no registro:

2014.03.10 04:39:11.093 Script closeallmarket AUDUSD,M30: removido<br / translate="no"> 2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: razão uninit 0
2014.03.10 04:39:11.093 fechamento do mercado AUDUSD,M30: inicializado
2014.03.10 04:39:10.109 Script closeallmarket AUDUSD,M30: carregado com sucesso
 

Substitua

 for(int i=OrdersTotal()-1;i<=0;i--)

para

 for(int i=OrdersTotal()-1;i>=0;i--)
 

Não recuse um recém-chegado a programar, olhe o código, para ver se ele está escrito corretamente. Que não é muito preguiçoso para lidar com isso. Não posso testá-lo no Testador de Estratégia porque é multimoeda. Arquivo com o código e os indicadores anexados ao arquivo.



Arquivos anexados:
 

Boa tarde.

Não posso fazer um código analógico de php para mql4:

$massiv = array(
            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877            
            );
                        
            asort($massiv);
            $i=0;
            foreach ($massiv as $key => $val){$i++;$massiv[$key]=$i;}
            
            $a="";
            ksort($massiv);
            foreach ($massiv as $key => $val){$a=$a.$val.".";}  

Ou seja, a partir de uma matriz.

            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877 

Necessidade de obter uma matriz

            "1" => 1,
            "2" => 3,
            "3" => 2,
            "4" => 4,
            "5" => 7,
            "6" => 5,
            "7" => 6,
            "8" => 8 

Precisa de ajuda.

 
Roger:

Substitua

para


Ohhhh... Cara, essa é outra hora, obrigado ))))
 

Estou tentando escrever uma simples EA que fecha todas as posições em minha conta quando atinge os valores especificados de lucro ou perda na moeda do depósito (aberta por vários símbolos), mas fecha as posições assim que elas aparecem (((

Eu não entendo o que está errado:

input double tp_c = 80.0;
input double sl_c = 120.0;

input int slip=5;

 double profit_c = 0.0;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }
 
denis77515:

Não recuse um recém-chegado a programar, olhe o código, para ver se ele está escrito corretamente. Que não é muito preguiçoso para lidar com isso. Não posso testá-lo no Testador de Estratégia porque é multimoeda. Anexei um arquivo com o código e os indicadores ao arquivo.



Estou muito interessado em como um iniciante está tão determinado a negociar com tal Expert Advisor e a escrever um sistema comercial que valha a pena. Eu não sinto pena do depósito?


O código mostra muitos erros sem entrar no algoritmo de negociação, nenhuma tentativa de otimizá-lo.

Por favor, encontre a diferença entre suas funções CountBuy_JPY() CountSell_JPY() CountBuy_GBP() Na saída de qualquer uma delas você obtém o mesmo resultado, em Comprar todas as posições abertas Comprar, em outras todas as posições Sal. Tente escrever todas estas funções em uma e obtenha duas matrizes interligadas com símbolos e número de pedidos usando-as.

Você está tão distante do Testador quanto a lua. Você deve escrever scripts para cada função e olhar o que você recebe, depois executar o depurador e olhar todas as variáveis. Esta é a única maneira de você avançar gradualmente

 
evillive:

Estou tentando escrever uma simples EA que fecha todas as posições em minha conta quando atinge os valores especificados de lucro ou perda na moeda do depósito (aberta por vários símbolos), mas fecha as posições assim que elas aparecem (((

Eu não entendo o que está errado:


Analisar a condição ... E o conselho é o mesmo, use os scripts impressos e comente as operações comerciais por enquanto e depure
if(profit_c > tp_c || profit_c < sl_c) closeall();   profit_c > 80 ИЛИ  profit_c < 120   
 
evillive:

Estou tentando escrever uma simples EA que fecha todas as posições em minha conta quando atinge os valores especificados de lucro ou perda na moeda do depósito (abro por vários símbolos), mas fecha as posições assim que elas aparecem (((

Eu não entendo o que está errado:



input double tp_c = 80.0;
input double sl_c = - 120.0; //// minus 120

input int slip=5;

 double profit_c ;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   profit_c = 0.0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }