La structure MqlTradeRequest doit être effacée avant de l'utiliser.
//+------------------------------------------------------------------+ //| Cempionat2012.mq5 | //| Victor Pavlyuk | //| | //+------------------------------------------------------------------+ #property copyright "Victor Pavljuk" #property version "1.03" input int TakeProfit=538; input int StopLoss=1000; input int TradeTime=13; input int t1=7; input int t2=1; input int delta=70; input double lot=5; bool cantrade=true; double Ask; double Bid; int OpenLong(double volume=5, int slippage=10000, string comment="", int magic=888) { MqlTradeRequest my_trade; MqlTradeResult my_trade_result; my_trade.action=TRADE_ACTION_DEAL; my_trade.symbol=Symbol(); my_trade.volume=NormalizeDouble(volume,1); my_trade.price=NormalizeDouble(Ask,_Digits); my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits); my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); my_trade.deviation=slippage; my_trade.type=ORDER_TYPE_BUY; my_trade.type_filling=ORDER_FILLING_RETURN; my_trade.comment=comment; my_trade.magic=magic; ResetLastError(); if(OrderSend(my_trade,my_trade_result)) { Print("Код результата операции - ",my_trade_result.retcode); } else { Print("Код результата операции - ",my_trade_result.retcode); Print("Ошибка открытия ордера = ",GetLastError()); } return(0); } int OpenShort(double volume=5, int slippage=10000, string comment="", int magic=888) { MqlTradeRequest my_trade; MqlTradeResult my_trade_result; my_trade.action=TRADE_ACTION_DEAL; my_trade.symbol=Symbol(); my_trade.volume=NormalizeDouble(volume,1); my_trade.price=NormalizeDouble(Ask,_Digits); my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits); my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); my_trade.deviation=slippage; my_trade.type=ORDER_TYPE_SELL; my_trade.type_filling=ORDER_FILLING_RETURN; my_trade.comment=comment; my_trade.magic=magic; ResetLastError(); if(OrderSend(my_trade,my_trade_result)) { Print("Код результата операции - ",my_trade_result.retcode); } else { Print("Код результата операции - ",my_trade_result.retcode); Print("Ошибка открытия ордера = ",GetLastError()); } return(0); } int OnInit() { return(0); } void OnDeinit(const int reason){} void OnTick() { double Open[]; MqlDateTime mqldt; TimeCurrent(mqldt); int len; MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); Ask=last_tick.ask; Bid=last_tick.bid; ArraySetAsSeries(Open,true); if(t1>=t2)len=t1+1; else len=t2+1; CopyOpen(_Symbol,PERIOD_M30,0,len,Open); if(((mqldt.hour)>TradeTime)) cantrade=true; if(!PositionSelect(_Symbol))// Если еще нет открытой позиции { if((mqldt.hour==TradeTime) && (cantrade)) { if(Open[t1]>(Open[t2]+delta*_Point)) { OpenShort(lot,10,"",888); cantrade=false; return; } if((Open[t1]+delta*_Point)<Open[t2]) { OpenLong(lot,10,"",888); cantrade=false; return; } } } return; } //+------------------------------------------------------------------+Pour commencer, juste pour être clair
Je pense que c'est un code pour demander pourquoi TP et SL sont égaux à Asku.
Sauf que l'auteur est différent.
IMHO.
peut retirer la structure de la fonction :
ou le glissement est trop important, pourquoi le dire comme ça ?
et pourquoi y a-t-il une paire de supports supplémentaire ?
si(((mqldt.hour)>TradeTime))
Il est possible de réécrire la fonction d'ouverture par type :
void PosOpen(int trade, string symbol) {if (trade==0) return; double Price; ENUM_ORDER_TYPE Type; if (trade==1) {Type= ORDER_TYPE_BUY; Price=SymbolInfoDouble(symbol,SYMBOL_ASK);} else {Type = ORDER_TYPE_SELL; Price=SymbolInfoDouble(symbol,SYMBOL_BID);} mytrade.PositionOpen(symbol,Type,Lot,Price,0,0,"Open"); return; }
Il est possible de réécrire la fonction d'ouverture par type :
alors précisez au moins de quelles bibliothèques proviennent les fonctions.
Pendant le test, je vois des messages dans le journal.
2012.09.21 20:07:11 Core 1 2012.09.18 13:00:00 failed instant sell 5.00 EURUSD at 1.30657 sl : 1.29657 tp : 1.31195 [Invalid request] (demande non valide)
Pendant le test, je vois des messages dans le journal.
2012.09.21 20:07:11 Core 1 2012.09.18 13:00:00 failed instant sell 5.00 EURUSD at 1.30657 sl : 1.29657 tp : 1.31195 [Invalid request] (demande non valide)
alors précisez au moins de quelles bibliothèques proviennent les fonctions.
#include <Trade\Trade.mqh>
Au fait, il se trouve par défaut dans le dossier du terminal, n'est-ce pas ? Elle ne doit pas être attachée à l'EA sur le chump ?

- www.mql5.com

- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Quelqu'un peut-il m'aider ? Je ne sais pas où se trouve l'erreur.
code :
//+------------------------------------------------------------------+
//| Cempionat2012.mq5 |
//| Victor Pavlyuk |
//| |
//+------------------------------------------------------------------+
#property copyright "Victor Pavljuk"
#property version "1.03"
entrée int TakeProfit=538 ;
entrée int StopLoss=1000 ;
entrée int TradeTime=13 ;
entrée int t1=7 ;
entrée int t2=1 ;
entrée int delta=70 ;
entrée double lot=5 ;
bool cantrade=true ;
double demande ;
double enchère ;
int OpenLong(double volume=5,
int slippage=10000,
chaîne commentaire="",
int magic=888)
{
MqlTradeRequest my_trade ;
MqlTradeResult mon_trade_result ;
mon_trade.action=TRADE_ACTION_DEAL ;
mon_marché.symbole=Symbole() ;
my_trade.volume=NormalizeDouble(volume,1) ;
my_trade.price=NormalizeDouble(Ask,_Digits) ;
my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits) ;
my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits) ;
mon_trade.deviation=slippage ;
mon_trade.type=ORDER_TYPE_BUY ;
mon_trade.type_filling=ORDER_FILLING_RETURN ;
mon_trade.comment=comment ;
mon_trade.magic=magique ;
ResetLastError() ;
if(OrderSend(my_trade,my_trade_result))
{
Print("code de résultat de la transaction - ",mon_trade_result.retcode)
}
sinon
{
Print("Code de résultat de l'opération - ",my_trade_result.retcode) ;
Print("Erreur d'ouverture de commande = ",GetLastError()) ;
}
retour(0) ;
}
int OpenShort(double volume=5,
int slippage=10000,
chaîne commentaire="",
int magic=888)
{
MqlTradeRequest my_trade ;
MqlTradeResult mon_trade_result ;
mon_trade.action=TRADE_ACTION_DEAL ;
mon_marché.symbole=Symbole() ;
my_trade.volume=NormalizeDouble(volume,1) ;
my_trade.price=NormalizeDouble(Ask,_Digits) ;
my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits) ;
my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits) ;
mon_trade.deviation=slippage ;
mon_trade.type=ORDER_TYPE_SELL ;
mon_trade.type_filling=ORDER_FILLING_RETURN ;
mon_trade.comment=comment ;
mon_trade.magic=magique ;
ResetLastError() ;
if(OrderSend(my_trade,my_trade_result))
{
Print("code de résultat de la transaction - ",mon_trade_result.retcode)
}
sinon
{
Print("Code de résultat de l'opération - ",my_trade_result.retcode) ;
Print("Erreur d'ouverture de commande = ",GetLastError()) ;
}
retour(0) ;
}
int OnInit()
{
retour(0) ;
}
void OnDeinit(const int reason){}
void OnTick()
{
double Open[] ;
MqlDateTime mqldt ;
TimeCurrent(mqldt) ;
int len ;
MqlTick last_tick ;
SymbolInfoTick(_Symbol,last_tick) ;
Ask=last_tick.ask ;
Bid=last_tick.bid ;
ArraySetAsSeries(Open,true) ;
si(t1>=t2)len=t1+1 ;
sinon len=t2+1 ;
CopyOpen(_Symbol,PERIOD_M30,0,len,Open) ;
si(((mqldt.hour)>TradeTime))
if(!PositionSelect(_Symbol))// s'il n'y a pas encore de position ouverte
{
si((mqldt.hour==TradeTime) && (cantrade))
{
if(Open[t1]>(Open[t2]+delta*_Point))
{
OpenShort(lot,10,",888) ;
cantrade=false ;
retour ;
}
si((Open[t1]+delta*_Point)<Open[t2])
{
OpenLong(lot,10,"",888);
{ return ; }((Open[t1]+delta*_Point)=false ;
retour ;
}
}
}
retour ;
}
//+------------------------------------------------------------------+