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

 
Eu, também, às vezes me pergunto por que os desenvolvedores, ao invés de todo o absurdo, não podiam apenas fazer dois botões no terminal: "ganhar" e "drenar". Os problemas seriam reduzidos em uma ordem de grandeza.
 
Necron >>:

Добрый всем! В общем проблема следующего плана. Есть тс, по которой нужно открывать позицию тройным лотом, после чего каждый лот сопровождается отдельно(со своим TP, сигналом закрытия). Интересуют способы реализации. Мне на ум пришел такой способ: использовать три отложенника, запоминать их тикеты, а потом каждый отдельно выбирать и закрывать по своему условию. Есть ли какие-либо другие способы (или более удобные)?

PS. Поймите правильно, около месяца назад только своего первого советника на машках написал=)))))

estabelecer um comentário para cada pedido ("lote_1", "lote_2"....), reconhecer os pedidos do comentário...

Se não estiver claro, então escreva mais detalhes...

 
StatBars >>:

установите каждому ордеру свой коммент("lot_1","lot_2"....), по коменту распознавайте ордера...

Если не понятно то пишите подробнее можно будет описать...

Obrigado, StatBars! É que eu já comecei a fazer com a escolha do mágico. Sua opção, eu acho que ficaria assim? (confesso que me lembrei que havia um semelhante em um dos EAs =)) Então qual opção é a mais ótima?

if ( (OrderSymbol() == Symbol()) &&
(StringSubstr(OrderComment(),0,0) == "lot_1") )

 
Necron >>:

Спасибо, StatBars! Просто я уже начал делать с выбором по магику. Ваш вариант думаю так будет выглядеть? (признаюсь, вспомнил что в одном из советников было похожее =)) Тогда какой вариант наиболее оптимален?

if ( (OrderSymbol() == Symbol()) &&
(StringFind(OrderComment(),"lot_1") >= 0) )

Corrigido um pouco.

Normalmente uso magik e o símbolo para identificar as "minhas" ordens da EA.

Coloco todas as outras informações no comentário.

Eu não diria que isso seria algo melhor, você não pode ver o que fará com os pedidos depois e se outros 3 pedidos podem abrir....

 
chief2000 >>:



Будет срабатывать на каждом тике пока выполняется условие. Небось код для тещи переделываете? :)





Um enorme OBRIGADO! Compilou tudo funciona, bipa a cada tique.

Minha sogra ainda não está aqui, mas se alguma coisa..., vou levar esta idéia em consideração))))

 

Desculpe, eu tenho uma pergunta. como fazer um cliente falhar programmaticamente.

Em minha pesquisa sobre descompilação me deparei com a ambigüidade da descompilação. agora surge a questão de como utilizá-la.

A escolha é quebrar o sistema.

ou pendurar o descompilador.

 
StatBars >>:

Поправил немного.

Магик и символ обычно использую для идентификации "своих" ордеров эксперта.

Всю остальную информацию запихиваю в коммент.

Я бы не сказал что тут будет что-то оптимальнее, не видно же что Вы потом будуте делать с ордерами и может ли открыться ещё одна 3-ка ордеров....

Obrigado! Corrigido no Expert Advisor para sua variante. Terminarei este milagre e o carregarei na Base de Código como minha primeira (mais ou menos) criação séria!) O sistema pelo qual escrevo o Expert Advisor é chamado Muteki, mas é um pouco com meus acréscimos (para gestão de cargos). É bom que pelo menos exista um indicador, que construa todas estas tendências=))))

Apenas outra questão se levantou. Como posso abrir três posições simultaneamente (ou aproximadamente uma cotação)? É correto, ou existem outras maneiras? Não posso fazê-lo com pingentes=(( Pequena distância às vezes é demais:(


if(b1==0 && !IsTradeContextBusy())
{
if(Low[0]<HHL_1 && Bid>=HHL_1 && trade_buy==true)
{
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage*PointX,sl_b,BuyTarget1,"lot_1_buy",Magic,0,Lime);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("lot_1_buy order opened : ",OrderOpenPrice());
b1=1;
}
else Print("Error opening BUY order : ",GetLastError());

return(0);
}
}

 
// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==16384){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
          time=OrderCloseTime();
          profit=OrderProfit();
          
            //мартин
            if( profit<=0) Lots=OrderLots()*2;
            //----
            
            
          }
        }
      }
    }
  }
}
//-----

A função procura o último lote fechado, se ele tiver perdido, seu lote para abrir um novo negócio será multiplicado por duas vezes.

Na prática, cada novo negócio, independentemente de ter sido lucrativo ou não, é duplicado em lote.


Pergunta: O que está errado?

 
Summer:

Eu me lembro de uma função que eu estava refazendo. Aqui está o código. Lotes (em orderend) =getLots(), koeff= fator de incremento de lote (o padrão é 2) Apenas até dez lotes (a partir de 0,1) que recebi em meu teste=))))

double getLots() {

double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
int round;
if(minlot==0.01)round=2;
if(minlot==0.1) round=1;
double koeff=2;
double result=Lots;

int total = OrdersHistoryTotal();
double spread = MarketInfo(Symbol(), MODE_SPREAD);

for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderProfit() > 0)
{
result = Lots;

} else {
result = OrderLots() * koeff;

}
}
}
result = NormalizeDouble(result, round);
if (result > maxlot) {
result = maxlot;
}
if (result < minlot) {
result = minlot;
}
RefreshRates();
return(result);
}

 

há um erro na função, não consigo encontrá-lo, ou é com ( ou com {

Eu anexei o código.

Razão: