[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 372

 
artemka_1981:
Agora quando o teste não abre uma única negociação no registro escreve Open_BuyS_SellS EURUSD,Daily: OrderSend error 131

O erro 131 é um volume incorreto. Tente o lote 1, por exemplo, talvez não seja permitido abrir com 0,01 lote.

ERR_INVALID_TRADE_VOLUME131Volume incorreto
 
ilunga:

O erro 131 é um volume incorreto. Tente o lote 1, por exemplo, talvez não seja permitido abrir com 0,01 lote.

ERR_INVALID_TRADE_VOLUME131Volume incorreto
//+------------------------------------------------------------------+
//|                                                Open_Buy_Sell.mq4 |
//|                                                                  |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#define magic 999
extern bool Buy = true  ; //  true - разрешено покупать
extern bool Sell = true  ; // true - разрешено продавать
#property link      "http://www.metaquotes.net"
extern double  _lots         = 1;
extern int     _takeProfit   = 1200;
extern int      maxpos       = 1;     // количество поз
extern bool    _trailingStop = true;
//+------------------------------------------------------------------+

int start()
  {
   double _slBuy=0.0,_slSell=0.0, _tpBuy=0.0, _tpSell=0.0, _opBuy=0.0, _opSell=0.0;

//if (iVolume(Symbol(),PERIOD_D1,0)>1) return;
//     if (Volume[0]>1) return;
     if (_trailingStop){ 
     _TrailingStop();
      }
   _opBuy=NormalizeDouble(iHigh(Symbol(),0,1), Digits);
   _slBuy=NormalizeDouble(iLow(Symbol(),PERIOD_D1,1), Digits);
   _tpBuy=NormalizeDouble(Ask+_takeProfit*Point, Digits);
      if ( _opBuy<Ask && CountPos(1)<maxpos)
       if(barOpen(OP_BUYSTOP)==1 ||barOpen(OP_BUY)==1 )
        OrderSend(Symbol(),OP_BUYSTOP,_lots,_opBuy,15,_slBuy,_tpBuy,"Open_Buy_Sell",0,Green);

   _opSell=NormalizeDouble(iLow(Symbol(),0,1), Digits);
   _slSell=NormalizeDouble(iHigh(Symbol(),PERIOD_D1,1), Digits);
   _tpSell=NormalizeDouble(Bid-_takeProfit*Point, Digits);
     if (_opSell>Bid && CountPos(0)<maxpos)
      if(barOpen(OP_SELLSTOP)==1 ||barOpen(OP_SELL)==1 )
       OrderSend(Symbol(),OP_SELLSTOP,_lots, _opSell,15,_slSell,_tpSell,"Open_Buy_Sell",0,Red);
//----
   return(0);
  }
//+------------------------------------------------------------------+  
 //Проверяем количесвто позиций.
   int CountPos(int type) 
{//Описание http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=66

    
int i;
int col;
int count=0 ;
for(i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol() && type==1 && OrderMagicNumber()== magic){count++;}
if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol() && type==0 && OrderMagicNumber()== magic){count++;}
         }
       }   
return(count);
}
//+------------------------------------------------------------------+
void _TrailingStop(){
   int i;
   double _stopLossSellF=NormalizeDouble(iHigh(Symbol(),0,1), Digits),
          _stopLossBuyF=NormalizeDouble(iLow(Symbol(),0,1), Digits);
   if (OrdersTotal()>0){
      for (i=OrdersTotal()-1; i>=0; i--){
         if (OrderSelect(i, SELECT_BY_POS)){
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
             
               if (OrderType()==OP_BUY && OrderOpenPrice() < _stopLossBuyF){
                  while (IsTradeContextBusy()) Sleep(1000);
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),_stopLossBuyF,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
               }
           
               if (OrderType()==OP_SELL && OrderOpenPrice() > _stopLossSellF && _stopLossSellF!=0.0){
                  while (IsTradeContextBusy()) Sleep(1000);
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),_stopLossSellF,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
               }
            }
         }
      }
   }
return;
}
int barOpen(int ty)
{
datetime tim=0;
 for(int i=0; i<=OrdersTotal(); i++)
    {  
       if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
       if(OrderSymbol() !=Symbol()|| OrderMagicNumber()!= magic|| OrderType()!=ty) continue; 
       if(tim<OrderOpenTime())        
          tim=OrderOpenTime();
   }
 for(i=0; i<=OrdersHistoryTotal(); i++)
    {  
       if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
       if(OrderSymbol() !=Symbol()|| OrderMagicNumber()!= magic|| OrderType()!=ty) continue; 
       if(tim<OrderOpenTime())        
          tim=OrderOpenTime();
   }
 
if(tim<iTime(Symbol(),PERIOD_D1,0)) return(1);
 return(0);
}
Boa tarde. Agora escreve Open_BuyS_SellS EURUSD,H4: OrderSend error 3

 
artemka_1981:
Boa tarde. Agora escreve Open_BuyS_SellS EURUSD,H4: OrderSend error 3

Ler códigos de erro
 
artemka_1981:
Bom dia. Agora diz Open_BuyS_SellS EURUSD,H4: OrderSend error 3

Ver ajuda para parâmetros de OrderSend e códigos de erro

3 - parâmetros errados.

Você perdeu uma e em vez de data de vencimento, você escreveu seta_color

 
ilunga:

Ver ajuda para parâmetros de OrderSend e códigos de erro

3 - parâmetros errados.

Você perdeu uma e em vez de data de vencimento, você escreveu seta_color

Sinto muito pelas perguntas estúpidas, esta é minha primeira EA que estou tentando escrever sozinho, todos os meus problemas começaram quando acrescentei a função de trilha, é por isso que eu lhe pedi ajuda para resolver meus erros
 

ajuda a quem sabe!!!!


A essência da estratégia: Entrada por sinal estocástico (5,14,3) saída também por estocástico, mas com outro período (5,3,3). Eu não entendo como fazer uma saída por estocástico e não por sinal inverso.
Eu tenho um problema e não tenho idéia de como ele pode ser resolvido, vou tentar explicar.
Portanto, no código que afixei, há 2 funções
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue;
}

closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return;
}
No vazio PrepareTicketsToClose(int signal, bool Invers, int & ticketsClose[][2], double & lots[], double arrayTickets[][9]) temos que colocar uma condição que decidirá se devemos deixar ou fechar o pedido...
Eu tentei colocar condições, mas nada funciona....
Alguém pode olhar e mostrar se há um erro nestas funções ou se eu fiz asneira....
Arquivos anexados:
osc_test_1.mq4  37 kb
 
Olá. Depois de ter executado o Expert Advisor no testador, preciso obter informações sobre o volume total de negócios realizados em lotes (por exemplo, nos logs). O Expert Advisor tem um bloco ММ, os negócios são executados com o volume em % de fundos livres, por isso não é possível simplesmente calcular multiplicando pelo número de negócios. Existe uma função padrão que fornece essas informações (como OrderLots, mas com montante total)? Se não existe tal função, alguém pode sugerir um código simples para a realização desta tarefa? Obrigado.
 

como abrir portas para mt4 no modem ADSL via WIFI? Eu vou à internet em 6 DTs. modelo tp-link W8901G leio que você pode abrir portas para torentes qualquer um pode enfrentar?

 
ruslanchik:

como abrir portas para mt4 no modem ADSL via WIFI? Eu vou à internet em 6 DTs. modelo tp-link W8901G leio que você pode abrir portas para torentes qualquer um pode enfrentar?

Ver http://megatorrents.org/forum/viewtopic.php?t=262709
 
ok segunda-feira vai mostrar ping.... Obrigado por agora.