[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 416

 
vegetate писал(а) >>

Você pode me dizer como passar uma dimensão de uma matriz bidimensional para uma função?

Estou confuso com alguma coisa.

int testarray[5][2] = {1,2,3,4,5,6,7,8,9,10};// хоть так и можно записать, но в уме нужно держать что это ТАБЛИЦА

void testfunc(int &inarray[][]){ // массив нужно передавать "как есть", но обрабатывать можно выбранную часть
string out_str="Result: "+inarray[i,0];

for (int i=1;i<5;i++){// еще нужно учитывать, что счет в массивах начинается с НУЛЯ. "первый - нулевой"
out_str += (", "+inarray[i,0]); // здесь бы использовал строковую функцию конкатенации
}
Print(out_str);
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
Print("Call first:");
testfunc(testarray);
Print("Call second:");
testfunc(testarray);
//----
return(0);
}
//+-----------

 

Eu tenho duas cópias da mesma plataforma de corretagem. Cada um tem sua própria conta de demonstração e uma pasta compartilhada chamada experts.

Se eu abrir a primeira, depois fechá-la e depois abrir a segunda, preciso digitar a senha novamente na segunda.

Eu fecho a segunda e abro a primeira - agora preciso da senha para a primeira. É suposto ser assim?

Obrigado!

 
Necron писал(а) >>

high=iHigh(NULL,60,1); Ou algo está errado?

Tudo está correto. Mas se você quiser usar vários períodos de tempo ou símbolos, você precisa fazer a lógica correspondente em sua EA.

 
Vinin >>:

Все правильно конечно. Но если нужно использовать несколько таймфреймов или инструментов, то нужно делать соотвествующую логику в советнике.

OK, vou dar uma olhada nisso. Obrigado!

 

Sou eu novamente... Não me repreenda muito... Tenho cerca de duas semanas de experiência com EAs...

Criei meu Expert Advisor baseado em fractais, mas ele continua mostrando o erro OrderModify 1 em meu registro durante o teste, embora meu alce esteja se movendo corretamente baseado em fractais. Eu usei a função FindNearFractal da Kim. O código é o seguinte:

   for( cnt=0; cnt< total; cnt++)
     {
      OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
           // check for trailing stop
            if( TrailFractal)
              {
               OrderModify(OrderTicket(),OrderOpenPrice(), FindNearFractal(NULL,0,MODE_LOWER),0,0,Green);
                     return(0);
                            }
           }
         else // go to short position
           {
            // check for trailing stop
            if( TrailFractal)
              {              
                     OrderModify(OrderTicket(),OrderOpenPrice(), FindNearFractal(NULL,0,MODE_UPPER),0,0,Red);
                     return(0);
               
              }
           }
        }
E em adições, outra pergunta. O código é o seguinte:
     for(int i = 0; i < OrdersTotal(); i++)
   {
      // выбор ордера
      if(OrderSelect( i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
  }
if(OrderType() == OP_SELL)
{
//при профите >20 pips добавится или докупится ...
 if(OrderProfit()>20)//////если поставить другое условие открывает много позиций
 OrderSend(Symbol(),OP_SELL, Lots,Bid,3, sl_sell,0,"Ma+Fr",16384,0,Red);
  PeriodForSleep=((Time[0]-Time[1])-(TimeCurrent()-Time[0]))*1000; 
Sleep( PeriodForSleep);
}
if(OrderType() == OP_BUY)
{
//при профите >20 pips добавится или докупится ...
 if(OrderProfit()>20)//////если поставить другое условие открывает много позиций
 OrderSend(Symbol(),OP_BUY, Lots,Ask,3, sl_buy,0,"Ma+Fr",16384,0,Lime);
   Sleep( PeriodForSleep);
}
Se eu definir um avanço fractal (ou qualquer outro sinal) em vez de OrderProfit()>20 na condição de adição, ele abre muitas posições. Tentei acrescentar Sleep()- não ajuda. Qual é o problema aqui?
 

OrderModify error 1 geralmente acontece quando os novos parâmetros correspondem exatamente aos da ordem.

 
keekkenen >>:

обычно OrderModify error 1 бывает, когда новые параметры точно соответствуют тем, что в ордере..

Obrigado, Keekkenen! Os parâmetros são diferentes. A resposta é encontrada aqui. O conselho (na linha) é pregar este erro...NormalizeDouble também não ajuda.

E o que você pode dizer sobre o segundo erro (em acréscimos)?

 
como a EAs sabe quanto lucro em papel, ou seja, lucro em posições não fechadas, existe no momento?
 
dmmikl86 писал(а) >>
como você descobre quanto lucro no papel, ou seja, lucro em posições não fechadas, está atualmente na EA?

KimIV tem a função GetProfitOpenPosInPoint().

 
khorosh >>:

У KimIV есть функция GetProfitOpenPosInPoint().

posso fazer assim, e será que vai funcionar?

extern double Level_Profit = 200;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double paper_money = AccountEquity()-AccountBalance();
   if ( paper_money > Level_Profit)
      {
       #include "scripts\s_close_all.mq4"
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+

ou seria melhor inserir o código do roteiro na EA?

Razão: