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

 
harvest:
Cavalheiros, poderiam me dar um exemplo da função que move uma posição aberta para o breakeven (trabalho em tick), meu Conselheiro Especialista tem uma rede de arrasto, o início desta rede de arrasto é somente após a função de capotamento para comprar. Agradecemos antecipadamente.


Veja o trailer - a biblioteca de redes de arrasto por Yury Dzyuban - em particular, como resolve a questão se apenas as redes de arrasto com lucro são ativadas, ou seja, se o valor da variável trlinloss = falso, se as redes de arrasto são executadas na área de perda. Edite sua função de arrasto de acordo com este exemplo e pronto.

Arquivos anexados:
 

Amigos, vocês podem me dizer por que o Martin clássico não funciona? Só abre negócios para comprar!!! Já faz um mês que estou mexendo com isso - emoção zero! Funciona bem no Testador de Estratégia, mas não na demonstração. Outra coisa interessante - quando eu defino T/S e T/P 1000 - abre apenas na Compra, e quando defino 200 - na Compra e Venda... Cara, qual é a diferença?

aqui está o código: help plz

//+------------------------------------------------------------------+ 
//| StMartin.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int total,ticket; 
    int slip = 3; 
    int Magic = 7; 

 


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 

   ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 



OrderOpenFunction(); 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 

void OrderOpenFunction()
{
   total = OrdersTotal();
   if(total < 1) 
   { 
      OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); 
      volumz = OrderLots(); 
      if(OrderProfit()<0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            double lot1 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            double lot2 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
      } 
      if(OrderProfit()>0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
      } 
   } 
}      
  
 
Alp:

Então fica ainda mais obscuro. Suponha que eu compre um euro por 1 000 000 (1k) dólares (o corretor multiplica isto por 100 como resultado o negócio vai por 100k) o gráfico salta 100 pontos e imediatamente os vende e eu estou no lado positivo por 10 000 dólares bem lá a comissão do corretor e espalha como resultado 6 000 dólares líquidos no meu bolso. (Bem, é claro que após a venda, cairá novamente por 100 pontos.) Isto é um absurdo!!!! Afinal, talvez caia ao fundo do poço? Caso contrário, jogadores muito grandes fariam bilhões sem fazer nada.


Então eu não sei...

Em geral, a coisa é provavelmente que para um movimento de preços perceptível é necessário comprar ou vender por uma quantidade muito grande, MUITO grande. Para tais somas, a alavancagem não é 1/200, como eu fiz, mas 1/2 figurativamente. Bem, isto é puramente meu pessoal. Eu posso escrever tais disparates...

 
Há uma coisa que me surpreende. Eu postei o código aqui antes, houve um erro, me ajudou a consertá-lo, Sepulca ajudou, graças a ela, até agora o código funciona todo... Mas ainda não entendo o enigma: no primeiro loop o seletor de ordem selecionou uma ordem, não houve erro, e então, quando selecionei a mesma ordem em outra linha, abaixo, o seletor de ordem mostrou erro? Se você puder, dê uma olhada, estou apenas curioso.
for(  i=0;i<=OrdersHistoryTotal();i++){
    OrderSelect(i ,SELECT_BY_POS,MODE_HISTORY);
     if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {





 current = OrderOpenTime();  Alert ( " current = OrderOpenTime(); ",  current);Alert ( " max ", max );
      
      if (current > max) 
      {                    
         max = current;      
         ticket = OrderTicket();   Alert ( " ticket = OrderTicket();  ", ticket );
      }}}}


       if (ticket>-1){
      OrderSelect( ticket,SELECT_BY_TICKET,MODE_HISTORY);Alert ("SELL Select error HISTORYticket ", GetLastError( )  ) ;
Dimka-novitsek:

De jeito nenhum! Por que não? Não havia ordens em aberto no momento da ultrapassagem! Talvez eu não entenda.

O ciclo de busca também está na história! É aí que eu atribuo à variável int ticket!

E jura, com licença, 2012.02.04 11:28:47 2011.12.06 16:35 GMT EURUSD,M30: Alerta: SELL Select error HISTORYticket 4105

Quando se passa de MODE_HISTORY para MODE_TRADES?

E o mais importante, seleciono a mesma ordem na história com a ajuda da seleção da ordem, e ela é selecionada primeiro, caso contrário eu não seria capaz de trabalhar com ela! Não há lógica!!!!!!I estou chocado.


 
Pode me dizer onde posso encontrar tal EA ou roteiro... Há um grupo de ordens (9-11) colocadas de cada lado do preço a uma distância de 5-7 pips dele. o tempo para acioná-las é estritamente limitado. portanto, muitas vezes as ordens não são pegas e são removidas. as ordens são colocadas no início da manhã, como regra geral, o mercado é muito plano. quero que o segundo grupo de ordens se movimente após o preço à medida que se aproxima de um dos grupos de ordens. simplesmente coloque, uma trilha de ordens pendentes com tp e sld. isso é possível? muito obrigado com antecedência.
 

Precisa de ajuda!

Tenho o seguinte bloco no meu EA (Event Counter):

if (isCloseLastPosByStop()==True) // Se a última encomenda fosse fechada por Stop

{
N=N+1;
Alerta(N, " alce ");
} else N=0;

PERGUNTA: como escrever os dados em um arquivo (excel) em vez de exibi-los na tela?

 

Boa tarde.

Favor informar por que as setas não são desenhadas, codifique:

ObjectCreate("miniDown", OBJ_ARROW, 0, Tempo[1], Aberto[1]);
ObjectSet("miniDown", OBJPROP_ARROWCODE, 241);
ObjectSet("miniDown", OBJPROP_COLOR, Amarelo);

 

Suponha que EURUSD=1,44757, GBPUSD=1,63366, você quer que eles estejam próximos um do outro.

Deixe-me explicar:

a=GBPUSD/EURUSD=1,12855336874901 aproximadamente 1,12855 ,

isto é, se eu quiser comprar/vender uma moeda para que o negócio seja aproximadamente igual em valor, então

Eu preciso comprar/vender EURUSD*a, mas não existe tal lote, então minha pergunta é como implementá-lo, cálculo de lote?

Eu não tenho tanto, então minha pergunta é como fazer isso?

 
T-G:
quero compartilhar a função para calcular o lote máximo permitido, levando em conta as posições abertas, em outras palavras, usando equidade. A função padrão calcula o risco, mas se eu tenho negócios, não tenho dinheiro suficiente para abri-los

Eu costumava escrevê-lo para uma EA personalizada:

//+----------------------------------------------------------------------------+
double CorrectLots(double lt, int Part=2) {
   double ltcorr, Money, MoneyCorr;
   double dig      = MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot   = MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot   = MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot   = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/Part,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                                      // Зададим начальное значением ltcorr равным значению lt
   if (lt>=MaxLot) ltcorr=MaxLot;                  // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;                  // ... значений лота
   Money=lt*OneLot;                                // Вычисляем стоимость открываемой позы
   if (Money<TradeMrg) return(ltcorr);             // Если свободных средств больше, чем цена позиции -  возвращаем неизменённый лот
   else if (Money>=TradeMrg) {                     // Если цена позиции равна или больше, чем есть свободных средств, то ...
      ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);         // ... рассчитаем допустимый лот
      MoneyCorr=ltcorr*OneLot;                      
      Print("Func CorrectLots: лот ",lt," скорректирован до ",DoubleToStr(ltcorr,2),
            " Стоимость до корректировки = ",DoubleToStr(Money,dig),
            " Стоимость после корректировки = ",DoubleToStr(MoneyCorr,dig)
            ); 
      return(ltcorr);                                                   // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}
//+----------------------------------------------------------------------------+

Para ajustar o lote, você precisa chamar a função, inserindo como parâmetro o lote que você deseja abrir uma posição, e ao invés do parâmetro Parte - o número pelo qual os fundos livres usados no comércio serão divididos. Ou seja, para negociar apenas metade dos fundos livres, Parte deve ter um valor de 2, se um terço, então 3, um quarto - 4, etc.

double Lot=CorrectLots(0.1, 2);

Após chamar a função, inserir Lote como parâmetro da função OrderSend();

A função limita os lotes em um EA com um Martin duro e evita a perda de lotes. Mas a rentabilidade também estava caindo...

 
resposta ao meu anterior, não entendo o que está errado lá =(