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 234

 
Integer:


Bem, aqui vamos nós, todos de uma só vez... Moderadores, seria melhor manter a ordem onde ela precisa ser monitorada. Há uma loucura acontecendo no fórum, e onde estão os moderadores? Ficar preso, quebrá-lo, mandá-lo embora, há moderadores. Talvez seja hora de parar com as besteiras?

Dói-me ver os gigantes do fórum lutando por nada. Este é um fórum para programadores de um recurso muito poderoso. Seja educado. Sugestão:

1. Se for feita uma tentativa de mudar para personalidades, mesmo de forma sub-reptícia, a proibição por 24 horas;

2. insultar uma pessoa - proibição de uma semana;

3. insultos repetidos com palavrões - um mês de proibição;

4.Ignorar todas as advertências anteriores e repetir as violações de forma severa - proibição permanente.

 
yosuf:

É doloroso ver os gigantes do fórum lutando por ninharias. Este é um fórum de programadores do recurso mais poderoso. Seja educado. Sugestão:

1. Se for feita uma tentativa de mudar para personalidades, mesmo de forma sub-reptícia, a proibição por 24 horas;

2. insultar uma pessoa - proibição de uma semana;

3. insultos repetidos com palavrões - proibição por um mês;

4.Ignorar todas as advertências anteriores e repetir as violações de forma severa - proibição perpétua.



Concordo plenamente, exceto que, infelizmente, os moderadores aqui não são suficientemente competentes para detectar "algo disfarçado". É o mesmo com todos os diplomatas sutis aqui.
 

Desculpem-me pelos offtops, mas talvez alguém possa me dizer do que se trata:

Do manual de instruções:

"É possível passar parâmetros por referência. Neste caso, a modificação de tais parâmetros afetará as variáveis correspondentes na função chamada passada por referência. Os elementos das arrays não podem ser passados por referência. Os parâmetros podem ser passados por referência somente dentro dos limites de um único módulo, tal oportunidade não é fornecida para funções de biblioteca. A fim de especificar que o parâmetro é passado por referência, o & modificador deve ser colocado após o tipo de dado.

As matrizes também podem ser passadas por referência, todas as mudanças serão refletidas na matriz inicial. Ao contrário de parâmetros simples, as matrizes também podem ser passadas por referência em funções de biblioteca".

A fim de passar um valor por referência de uma função de biblioteca, tenho que usar um proxy na forma de uma matriz de dimensão de unidade,

existem outras soluções?

E por que isso é feito dessa maneira?

 
ALXIMIKS:

Desculpem-me pelos offtops, mas talvez alguém possa me dizer do que se trata:

Do manual de instruções:

"É possível passar parâmetros por referência. Neste caso, a modificação de tais parâmetros afetará as variáveis correspondentes na função chamada passada por referência. Os elementos das arrays não podem ser passados por referência. Os parâmetros podem ser passados por referência somente dentro dos limites de um único módulo, tal oportunidade não é fornecida para funções de biblioteca. Para especificar que o parâmetro é passado por referência, o modificador & deve ser colocado após o tipo de dado.

As matrizes também podem ser passadas por referência, todas as mudanças serão refletidas na matriz inicial. Ao contrário de parâmetros simples, as matrizes também podem ser passadas por referência em funções de biblioteca".

1. Para passar um valor por referência de uma função de biblioteca, eu tenho que usar um proxy na forma de uma matriz de dimensão de unidade,

existem outras soluções?

2. Por que isso é feito de tal maneira?

1. Certo. Não há outra forma na MQL4.

2. O que exatamente? Se estamos falando em passar por referência, então é para passar grandes volumes de dados (maiores do que o comprimento do tipo de base). Não para carregar a pilha com eles. Normalmente, estruturas, classes e matrizes são passadas pelo ponteiro ou referência. Embora a classe e a estrutura possam ser devolvidas da função através do retorno. Você também pode retornar uma referência ou ponteiro a uma classe, estrutura ou matriz.

 

Eu tenho este problema:

Quando eu mudo o batente, de vez em quando ele não coloca uma parada no último pedido aberto. Acontece muito raramente, mas dispara de vez em quando.

Não tenho nenhum erro nos preços. Apenas um canalha às vezes não coloca um pedido na última posição, após o que o pedido é recalculado.

Você pode me dizer onde eu fiz errado?

//+-------------------------------------------------------------------------------------+
//|                        Управление StopLoss, TakeProfit                              |
//+-------------------------------------------------------------------------------------+
bool ProfitManagement()
{
double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
double StopLossSell = SellAP-Profit*Point;
double TakeProfitSell = SellAP - Profit*Point;
RefreshRates();
for(int good = 0; good < OrdersTotal(); good ++)     // Выбираем со всего массива ордеров
 {
 if(OrderSelect (good, SELECT_BY_POS, MODE_TRADES))             
 if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
 if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  //Выбираем ордера эксперта
   { 
//-------------------------Order Buy-----------------------------------------------------  
if (BuyCount >1)                                           //Если открыты длинные позиции
 {
 if (BuyAP < Bid)                                                //Если  мы идем по рынку  
 if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)           // Профит не равен нужному
 if (Bid - StopLossBuy > DedZone)                    // Уровень достаточно удален от цены
 if (WaitForTradeContext())                                // Свободен ли торговый поток?
 if (OrderType() == OP_BUY)                                        // Выбираем ордера Buy
 if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime))    // Изменяем StopLoss
  {
 Alert (Symbol()," Хрень со стопами! ",   GetLastError());
 return(false);
  }

// ну и далее по логике
 
yosuf:

É doloroso ver os gigantes do fórum lutando por ninharias. Este é um fórum de programadores do recurso mais poderoso. Seja educado. Sugestão:

1. Se for feita uma tentativa de mudar para personalidades, mesmo de forma sub-reptícia, a proibição por 24 horas;

2. insultar uma pessoa - proibição de uma semana;

3. insultos repetidos com palavrões - proibição por um mês;

4.Ignorar todas as advertências anteriores e repetir violações de forma severa - proibição perpétua.


E o pelotão de fuzilamento quando? Não vai haver?
 
Limita:

Eu tenho este problema:

Quando eu mudo o batente, de vez em quando ele não coloca uma parada no último pedido aberto. Acontece muito raramente, mas dispara de vez em quando.

Não tenho nenhum erro nos preços. Apenas um canalha às vezes não coloca um pedido na última posição, após o que o pedido é recalculado.

Por favor, me avise onde fiz mal?

Explique esta seqüência em palavras:

   //-------------------------Order Buy-----------------------------------------------------  
         if (BuyCount >1) {
            if (BuyAP < Bid)                                      //Если  мы идем по рынку, то выполнится следующая  
            if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)   // Профит не равен нужному
            if (Bid - StopLossBuy > DedZone)                      // Уровень достаточно удален от цены
            if (WaitForTradeContext())                            // Свободен ли торговый поток?
            if (OrderType() == OP_BUY)                            // Выбираем ордера Buy
            if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
               Alert (Symbol()," Хрень со стопами! ",   GetLastError());
               return(false);
            }

Em termos simples, como você diria a um companheiro que está longe de programar

 

Queremos ganhar, por exemplo, 50 pips por posição. StopLoss é igual ao nosso preço médio + 50 pips .

Se tivermos uma posição longa em aberto, ganhamos uma certa quantia de dinheiro com ela. Colocamos o StopLoss a um certo nível. Deixe o mercado crescer ainda mais. Se ainda não estamos ganhando dinheiro suficiente, esperamos até começarmos a ganhar o suficiente.

Abrimos outra posição na direção da compra. O preço médio muda, nós mudamos o StopLoss.

E é claro que estabelecemos paradas, seguimos as regras de um corretor (fluxo comercial, nível de parada), caso contrário o corretor não nos entenderá :)))

Espero ter conseguido explicar :)))

 
Limita:

Queremos ganhar, por exemplo, 50 pips por posição. StopLoss é igual ao nosso preço médio + 50 pips .

Se tivermos uma posição longa em aberto, ganhamos uma certa quantia de dinheiro com ela. Colocamos o StopLoss a um certo nível. Deixe o mercado crescer ainda mais. Se ainda não estamos ganhando dinheiro suficiente, esperamos até começarmos a ganhar o suficiente.

Abrimos outra posição na direção da compra. O preço médio muda, nós mudamos o StopLoss.

E é claro que estabelecemos paradas, seguimos as regras de um corretor (fluxo comercial, nível de parada), caso contrário o corretor não nos entenderá :)))

Espero ter conseguido explicar :)))

Sim ... Eu quis dizer - a lógica dessas linhas ...

Você tem uma lógica ambígua aí, pois não há parênteses curvos. O que significa que nem todas as linhas serão satisfeitas se a condição anterior for satisfeita

 
Limita:

Eu tenho este problema:

Quando eu mudo o batente, de vez em quando ele não coloca uma parada no último pedido aberto. Acontece muito raramente, mas dispara de vez em quando.

Não tenho nenhum erro nos preços. Apenas um canalha às vezes não coloca um pedido na última posição, após o que o pedido é recalculado.

Por favor, diga-me onde fiz mal?


for (int good = 0; good < OrdersTotal(); good ++){                                // Выбираем со всего массива ордеров
    }    

É melhor fazer desta maneira (alguém escreveu que teve problemas ao modificar ou apagar pedidos com sua maneira de fazer isso) :

for (int good = OrdersTotal()-1; good >= 0; good --){     // Выбираем со всего массива ордеров
    }  

E por que óleo e manteiga ??? (deixar uma coisa em paz)

 if (OrderSymbol() != Symbol() || OrderMagicNumber() !=  MagicNumber) continue;
 if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber) {          //Выбираем ордера эксперта
    }
Razão: