[Arquivo!] Escrever um assessor de graça - página 83

 
int OrderSend( símbolo de corda, int cmd, volume duplo, preço duplo, int slippage, stoploss duplo, takeprofit duplo, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
A principal função usada para abrir uma posição ou colocar uma ordem pendente.
Devolve o número do ticket atribuído ao pedido pelo servidor comercial ou -1 se falhar. Para obter informações adicionais sobre erros, é necessário chamar a função GetLastError().
Notas:
Na abertura de uma ordem de mercado (OP_SELL ou OP_BUY), somente os últimos preços de Bid (para venda) ou Ask (para compra) podem ser usados como preço aberto. Se a operação for realizada com uma segurança diferente da atual, a função MarketInfo() deve ser usada com o parâmetro MODE_BID ou MODE_ASK para que as últimas cotações para esta segurança sejam obtidas. O preço calculado ou não pode ser aplicado. Se não houver o preço aberto solicitado no segmento de preço ou se este não tiver sido normalizado de acordo com a quantidade de dígitos após o ponto decimal, será gerado o erro 129 (ERR_INVALID_PRICE). Se o preço aberto solicitado estiver totalmente desatualizado, o erro 138 (ERR_REQUOTE) será gerado independentemente sobre o parâmetro de escorregamento. Se o preço solicitado estiver desatualizado, mas presente no fio, a posição será aberta ao preço atual e somente se o preço atual estiver dentro da faixa depreço+deslizamento.

Os níveis StopLoss e TakeProfit não podem estar muito próximos do mercado. A distância mínima dos níveis de parada em pontos pode ser obtida usando a função MarketInfo() com o parâmetro MODE_STOPLEVEL. No caso de níveis de parada errados ou não normalizados, será gerado o erro 130 (ERR_INVALID_STOPS).

Na colocação de uma ordem pendente, o preço aberto não pode estar muito próximo do mercado. A distância mínima do preço pendente do mercado atual em pontos pode ser obtida usando a função MarketInfo() com o parâmetro MODE_STOPLEVEL. Em caso de falso preço aberto de uma ordem pendente, será gerado o erro 130 (ERR_INVALID_STOPS).

A aplicação do tempo de expiração de pedidos pendentes pode ser desativada em alguns servidores comerciais. Neste caso, quando um valor não zero é especificado no parâmetro deexpiração, o erro 147 (ERR_TRADE_EXPIRATION_DENIED) será gerado.

Em alguns servidores comerciais, a quantidade total de ordens abertas e pendentes pode ser limitada. Se este limite for ultrapassado, nenhuma nova posição será aberta (ou nenhuma ordem pendente será colocada) e o servidor comercial retornará o erro 148 (ERR_TRADE_TOO_MANY_ORDERS).
Parâmetros:
símbolo - Símbolo para negociação.
cmd - Tipo de operação. Pode ser qualquer uma das enumerações de operações comerciais.
volume - Número de lotes.
preço - Preço preferencial do ofício.
escorregamento - Deslizamento máximo de preço para ordens de compra ou venda.
stoploss - Parar o nível de perda.
takeprofit - Tirar nível de lucro.
comentário - Encomendar texto de comentário. A última parte do comentário pode ser alterada pelo servidor.
mágica - Encomende o número mágico. Pode ser usado como identificador definido pelo usuário.
expiração - Tempo de expiração do pedido (somente para pedidos pendentes).
arrow_color - Cor da seta de abertura na tabela. Se o parâmetro estiver faltando ou tiver a seta de abertura do valor CLR_NONE não está desenhada no gráfico.
 
#link da propriedade "dwgrell@gmail.com"

//--- parâmetros de entrada
período int externo=16;
porog externo int=50;

lote duplo externo=1;
k=5000;

bool pl=true externo;
//+------------------------------------------------------------------+
//| função de inicialização especializada |
//+------------------------------------------------------------------+
int init()
{
//----

//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização de especialistas |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
duplo bs=NormalizarDuplo(iCustom(Símbolo(),0, "Aver",período,0,0),Dígitos);
duplo ss=NormalizarDuplo(iCustom(Símbolo(),0, "Aver",período,1,0),Dígitos);
double tpb=NormalizeDouble(bs+(bs-ss),Digits);
double tps=NormalizeDouble(ss-(bs-ss),Digits);
if(pl===verdadeiro)lotes duplos=MathMin(AccountFreeMargin()/k,5);
if(pl===falso)lotes=lote;
if(OrdensTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);//Open Buy Limit.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,",1394,0,Blue);//Open Sell Limit.
}
if(OrdersTotal()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//selecione o pedido mais próximo.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
if(OrderType()==OP_SELLL&&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
if(OrderType()==OP_SELLL&&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
if(OrdersTotal()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,",1394,0,Blue);}
if(OrderType()==OP_SELLL) {OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
}

retorno(0);
}
//+------------------------------------------------------------------+
 
#property link "dwgrell@gmail.com"

//--- input parameters
extern int period=16;
extern int porog=50;

extern double lot=1;
extern int k=5000;

extern bool pl=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

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

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double bs=NormalizeDouble(iCustom(Symbol(),0,"Aver",period,0,0),Digits);
double ss=NormalizeDouble(iCustom(Symbol(),0,"Aver",period,1,0),Digits);
double tpb=NormalizeDouble(bs+(bs-ss),Digits);
double tps=NormalizeDouble(ss-(bs-ss),Digits);
if(pl==true)double lots=MathMin(AccountFreeMargin()/k,5);
if(pl==false)lots=lot;
if(OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);//Открываем отложник на покупку.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);//Открываем отложник на продажу.
}
if(OrdersTotal()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//Выбираем ближайший ордер.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
if(OrdersTotal()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {/*OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {/*OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {/*OrderModify(OrderTicket(),bs,ss,tpb,0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){/*OrderModify(OrderTicket(),ss,bs,tps,0,Blue);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
}

return(0);
}
//+------------------------------------------------------------------+
 
Conta: 154603Nome: DmitriyMoeda: USD2011 12 de julho, 14:23
Transações Fechadas:
BilheteTempo abertoTipoTamanhoItemPreçoS / LT / PTempo de fechamentoPreçoComissãoImpostosSwapLucro
37055732011.07.12 13:57compre2.16eurusd1.39821.39731.40652011.07.12 14:131.39730.000.000.00-194.40
37053282011.07.12 13:19compre2.01eurusd1.39241.38991.39482011.07.12 13:491.39480.000.000.00482.40
37053562011.07.12 13:14vender2.17eurusd1.39001.39241.38762011.07.12 13:191.39240.000.000.00-520.80
37052852011.07.12 13:05vender2.17eurusd1.39141.39241.39042011.07.12 13:111.39040.000.000.00217.00
37052782011.07.12 13:04compre2.17eurusd1.39241.39141.39342011.07.12 13:051.39140.000.000.00-217.00
37048122011.07.12 11:32compre2.40eurusd1.39591.39141.40202011.07.12 13:011.39140.000.000.00-1 080.00
37040302011.07.12 13:01vender1.88eurusd1.39141.39171.39112011.07.12 13:011.39170.000.000.00-56.40
37041582011.07.12 10:22compre2.13eurusd1.38961.38981.39582011.07.12 11:301.39580.000.000.001 320.60
37040632011.07.12 10:12compre2.02eurusd1.38611.38341.38882011.07.12 10:211.38880.000.000.00545.40
37040202011.07.12 10:05compre1.92eurusd1.38481.38341.38592011.07.12 10:121.38590.000.000.00211.20
37040012011.07.12 10:04vender1.95eurusd1.38371.38481.38312011.07.12 10:051.38480.000.000.00-214.50
37035052011.07.12 10:01compre1.82eurusd1.38431.38371.38492011.07.12 10:041.38370.000.000.00-109.20
37039202011.07.12 09:52vender2.04eurusd1.38451.38431.37552011.07.12 10:011.38430.000.000.0040.80
37036312011.07.12 09:12vender1.88eurusd1.38921.39351.38492011.07.12 09:501.38490.000.000.00808.40
37035332011.07.12 09:03vender1.80eurusd1.39151.39351.38952011.07.12 09:101.38950.000.000.00360.00
37035062011.07.12 09:02vender1.82eurusd1.39271.39301.39242011.07.12 09:021.39300.000.000.00-54.60
 
Eu não o recomendo de verdade.
 
grell não vou parar as perdas
 
parar a perda em castiçal baixo
 
ou máximo dependendo de qual ordem
 
Tente olhar o código EA, e você entenderá porque ele se esterilizou. é simples lá, porque eu o escrevi para um testador. Mas, estranhamente, funciona.
 
Para ser honesto, eu não entendo nada de programação MQL.
Razão: