Um assessor que seguiria a tarifa em um gráfico de cinco minutos com condições após o lançamento: - página 13
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Novamente um contratempo.
Estou tentando fazer o código acima funcionar. Um erro aparece no registro com o texto:
18:38:23 '153085': ordem de venda 1,00 GBPUSD abertura em 2,0006 sl: 2,0019 tp: 2,0003 falhou [Inválido S/L ou T/P]
Qual é o significado disto?
1) E o que MT4 você usa?
2) Qual é a distância permitida de perda de estoque e takeprofit nesta corretora?
Antes disso, ontem com estes parâmetros t/r e s/l todos funcionaram :(((
Eu faria isso...
Especificações contratuais
(para mini *100)
para micro
(para mini *100)
níveis
comprar
venda
//+------------------------------------------------------------------+ //| Expert-000001.mq4 | //| Copyright © 2008, salesman*** | //| http://www.forexgrand.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, salesman***" #property link "http://www.forexgrand.ru" //---- extern string _Parameters_b_Lots = "Параметры модуля расчёта лота"; extern int LotsWayChoice = 0; // Способ выбора рабочего лота // 0-фиксированный, // 1-процент от депозита, // 2-фракционно-пропорциональный, // 3-фракционно-фиксированный, //extern int LotsPercent = 40; // Процент от депозита extern double StopLoss=13; // Stop Loss extern double TakeProfit=3; // Take Profit //extern int Percent=70; extern double Lots=1; // Объем сделки в % extern double Slippage =4; // Максимальное отклонение от запрошенной цены extern int MagicNumber=0; // Order ID extern int Delta=15; // Сигнал приказа в пунктах //extern int TimeForSleep = 0; // Время для отдыха после сделки extern int ticket; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int start() { int total=OrdersTotal(); if(total<1) {// если нет открытых позиций if (NumberOfBarOpenLastPos("", 0, -1, MagicNumber)>0){ //--- if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла больше Delta пунктов - продаем!!! { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Продал"); if(ticket<0){Print("Ошибка открытия ордера SELL #",GetLastError());return(0);} } //------------------------------------------------------------------------- if (iOpen(NULL,0,0)-Bid >=Delta*Point) //цена упала больше Delta пунктов - покупаем!!! { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил"); if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);} } //---- } //if (NumberOfBarOpenLastPos }//if(OrdersTotal return(0); } //------------------------------ //+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(iBarShift(sym, tf, oot, True)); }Parece haver algo de errado com a linha
Sem esta condição, o Expert Advisor trabalha...
Por que você colocou lá alguns parâmetros para calcular o lote? Você não precisa disso...
Lotes' - variável já definida C:\Program Files\MetaTrader - E-Global TFG\expert-001.mq4 (21, 15)
Aqui está o código:
//+------------------------------------------------------------------+ //| Expert-001.mq4 | //| Copyright © 2008, salesman*** | //| http://www.forexgrand.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, salesman***" #property link "http://www.forexgrand.ru" #include <b-Lots.mqh> #include <stdlib.mqh> //---- //extern string _Parameters_b_Lots = "Параметры модуля расчёта лота"; //extern int LotsWayChoice = 0; // Способ выбора рабочего лота // 0-фиксированный, // 1-процент от депозита, // 2-фракционно-пропорциональный, // 3-фракционно-фиксированный, //extern int LotsPercent = 40; // Процент от депозита extern double StopLoss=13; // Stop Loss extern double TakeProfit=3; // Take Profit //extern int Percent=70; extern double Lots=0.9; // Объем сделки в % extern double Slippage =4; // Максимальное отклонение от запрошенной цены extern int MagicNumber=0; // Order ID extern int Delta=15; // Сигнал приказа в пунктах //extern int TimeForSleep = 0; // Время для отдыха после сделки extern int ticket; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int start() { int total=OrdersTotal(); if(total<1) {// если нет открытых позиций if (NumberOfBarOpenLastPos("", 0, -1, MagicNumber)>0){ //--- if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла больше Delta пунктов - продаем!!! { Lots=GetSizeLot(); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Продал"); if(ticket<0){Print("Ошибка открытия ордера SELL #",GetLastError());return(0);} } //------------------------------------------------------------------------- if (iOpen(NULL,0,0)-Bid >=Delta*Point) //цена упала больше Delta пунктов - покупаем!!! { Lots=GetSizeLot(); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил"); if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);} } //---- } //if (NumberOfBarOpenLastPos }//if(OrdersTotal return(0); } //------------------------------ //+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(iBarShift(sym, tf, oot, True)); }Eu lhe disse para deixá-lo em parâmetros externos. Os parâmetros de cálculo do lote serão então definidos para PROPERTIES (da biblioteca).
Confira. Funciona ou não? Uma vez eu o dirigi - ele funciona...
E funciona também. Eu ainda preciso entender a função
NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1)Um aviso aparece:
Iniciar função não encontrada e não pode ser executada.
O que isso significa?