Bonjour. Aide pour les nuls : J'ai un EA qui peut placer des ordres en attente sur le min. et le max. de la bougie précédente. Ouverture dans la direction de la bougie.
Le besoin :
- Pour changer le sens de l'ouverture, c'est-à-dire de l'achat en attente à la vente en attente.
- Faire les min et max de la bougie précédente au lieu des min et max du jour précédent .
- Laissez tout le reste tel quel, c'est-à-dire supprimez les ordres, les paramètres de lot, les stop-los, le numéro magique...
Toutes mes actions conduisent soit à l'erreur 130 dans le testeur, soit à l'impossibilité de compiler. Merci pour tout conseil.
Voici le code qui fonctionne, sans mon intervention.
extern double Lot = 0.01 ; extern int StopLoss = 0 ; extern int TakeProfit = 0 ; extern int Magic = 618 ;
//+------------------------------------------------------------------+ //| fonction d'initialisation des experts | //+------------------------------------------------------------------+ int init() { //----
//---- return(0) ; } //+------------------------------------------------------------------+ //| fonction de désinitialisation des experts | //+------------------------------------------------------------------+ int deinit() { //----
//---- return(0) ; } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //----
Aidez-nous s'il vous plaît, l'ordre doit être clôturé à 4 fois la distance entre le haut et le prix d'ouverture de l'ordre.
Où est-ce que je me suis trompé ?
tous les ordres sont clôturés dans les 3 pips de l'ouverture
Avez-vous essayé de calculer le résultat de votre formule ? Si ce n'est pas le cas, alors faites-le, parce que j'ai droit à des conneries. C'est peut-être parce que je ne connais pas toutes les conditions.
externdouble lot=0.1;
externdouble tp=0;
externdouble sl=0;
int Real_Order=-1; // Пока рыночных нетstring Symb=Symbol; // Финанс. инструментint start() // Спец. функция start()
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,0,Bid-sl*Point,Ask+tp*Point);
if(IsDemo()) PlaySound("alert.wav");
for (int i=1; i<=OrdersTotal(); i++) //Цикл по всем ордерам,..
{ //отражённым в терминалеif(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
{
//-------------------------------------------------------------- if (OrderSymbol()!= Symb) continue; // Не наш фин.инструм.int Tip=OrderType(); // Тип ордераif (Real_Order>1) continue; //отложник ордер //------------------------------------------------------ 4 --double Price=OrderOpenPrice(); // Цена ордераifNormalizeDouble(tp,sl,Digits) // Выбор самого близкого орд
{
Real_Order=Tip; // Есть рыночный ордерint Ticket=OrderTicket(); // Номер ордераdouble Lot=OrderLots(); // Количество лотов
}
} //Конец анализа ордера
} //Конец перебора орд.//---------------------------------------------------------------------+while(true) // Цикл закрытия орд.
{
if (Real_Order==-1) // Если рыночных нет
{
Alert("По ",Symb," рыночных ордеров нет");
break; // Выход из цикла закр
}
//--------------------------------------------------------- 7 --switch(Real_Order) // По типу ордера
{
case0: double Price_Cls=Bid; // Ордер Buystring Text="Buy "; // Текст для Buybreak; // Из switchcase1: Price_Cls=Ask; // Ордер Sell
Text="Sell "; // Текст для Sell
}
Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера//--------------------------------------------------------- 8 --if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер ",Text," ",Ticket);
break; // Выход из цикла закр
}
//--------------------------------------------------------- 9 --int Error=GetLastError(); // Не получилось :(switch(Error) // Преодолимые ошибки
{
case135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеcontinue; // На след. итерациюcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеcontinue; // На след. итерациюcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеRefreshRates(); // Обновим данныеcontinue; // На след. итерацию
}
switch(Error) // Критические ошибки
{
case2 : Alert("Общая ошибка.");
break; // Выход из switchcase5 : Alert("Старая версия клиентского терминала.");
break; // Выход из switchcase64: Alert("Счет заблокирован.");
break; // Выход из switchcase133:Alert("Торговля запрещена");
break; // Выход из switchdefault: Alert("Возникла ошибка ",Error);//Другие варианты
}
break; // Выход из цикла закр
}
return; // Выход из start()
}
En fait, vous pouvez double-cliquer sur le message d'erreur et le curseur ira à l'endroit spécifié (au passage) où l'erreur de compilation s'est produite, c'est-à-dire ici : (8, 13)
Après cela, d'autres erreurs seront lancées... :)
Déplacez la ligne ci-dessus au début de la fonction start()
C'est un début - il faut ensuite s'occuper des autres erreurs...
Les gars, on a besoin d'aide. Décrire la situation.
le prix actuel est de 1.4100 (par exemple), je dois trouver une barre dont l'ouverture sera dans (plus ou moins 10 pt de 1.4100) de 1.4090 à 1.4110 - c'est ok.
Par exemple, le programme a trouvé la barre avec l'ouverture à 1.4105 qui me convient.
Ensuite, le programme doit comparer cette barre avec la barre à sa gauche et à sa droite et si elle est plus basse, elle sera appropriée.
Bonjour. Aide pour les nuls : J'ai un EA qui peut placer des ordres en attente sur le min. et le max. de la bougie précédente. Ouverture dans la direction de la bougie.
Le besoin :
- Pour changer le sens de l'ouverture, c'est-à-dire de l'achat en attente à la vente en attente.
- Faire les min et max de la bougie précédente au lieu des min et max du jour précédent .
- Laissez tout le reste tel quel, c'est-à-dire supprimez les ordres, les paramètres de lot, les stop-los, le numéro magique...
Toutes mes actions conduisent soit à l'erreur 130 dans le testeur, soit à l'impossibilité de compiler. Merci pour tout conseil.
Voici le code qui fonctionne, sans mon intervention.
extern double Lot = 0.01 ;
extern int StopLoss = 0 ;
extern int TakeProfit = 0 ;
extern int Magic = 618 ;
int Up_bars = 0 ;
int Down_bars = 0 ;
double StopLoss_new = 0 ;
double TakeProfit_new = 0 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation des experts |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation des experts |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0) ;
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
for( int cnt=0;cnt<OrdersTotal();cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)>0)
{
if (
(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
&& OrderMagicNumber() == Magic
&& OrderSymbol() == Symbol()
&& OrderComment() != DoubleToStr(Bars,0)
)
{
Comment("okkk") ;
OrderDelete(OrderTicket()) ;
}
}
}
StopLoss_new = StopLoss ;
TakeProfit_new = TakeProfit ;
if (Up_bars != Bars)
{
if (High[1]-Ask >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(High[1]-StopLoss*Point,Digits) ;
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(High[1]+TakeProfit*Point,Digits) ;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(High[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000) ;
RefreshRates() ;
}
else
{
Up_bars = Bars ;
}
}
}
StopLoss_new = StopLoss ;
TakeProfit_new = TakeProfit ;
if (Down_bars != Bars)
{
if (Bid-Low[1] >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(Low[1]+StopLoss*Point,Digits) ;
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(Low[1]-TakeProfit*Point,Digits) ;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Low[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000) ;
RefreshRates() ;
}
else
{
Down_bars = Bars ;
}
}
}
//----
return(0) ;
}
//+------------------------------------------------------------------+
Bonjour. Aidez un imbécile à comprendre :
Capitaine Evidence... et pourtant quelqu'un me donne un indice.
Je vais vous donner un indice - mettez cette expression en mots. Et vous verrez que vous l'avez mal mis.
PS.
S'il est si évident pour vous de savoir où chercher une erreur, alors pourquoi demander ?
Si l'erreur 130. Reconsidérer l'arrêt et la prise en charge.
Aidez-nous s'il vous plaît, l'ordre doit être clôturé à 4 fois la distance entre le haut et le prix d'ouverture de l'ordre.
Où est-ce que je me suis trompé ?
tous les ordres sont clôturés dans les 3 pips de l'ouverture
Avez-vous essayé de calculer le résultat de votre formule ? Si ce n'est pas le cas, alors faites-le, parce que j'ai droit à des conneries. C'est peut-être parce que je ne connais pas toutes les conditions.
Une seule erreur - je ne sais pas comment la réparer. Où est le problème ?
'Symbol' - initialisation attendue C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)
Symbole - initialisation attendue C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)
alex12, spécifiez quelque chose de précis, comme
Une seule erreur - je ne sais pas comment la réparer. Où est le problème ?
'Symbol' - initialisation attendue C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)
Symbole - initialisation attendue C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)
Vous avez :
Vous en avez besoin :
En fait, vous pouvez double-cliquer sur le message d'erreur et le curseur ira à l'endroit spécifié (au passage) où l'erreur de compilation s'est produite, c'est-à-dire ici : (8, 13)Après cela, d'autres erreurs seront lancées... :)
Déplacez la ligne ci-dessus au début de la fonction start()
C'est un début - il faut ensuite s'occuper des autres erreurs...
Bonjour à tous.
Les gars, on a besoin d'aide. Décrire la situation.
le prix actuel est de 1.4100 (par exemple), je dois trouver une barre dont l'ouverture sera dans (plus ou moins 10 pt de 1.4100) de 1.4090 à 1.4110 - c'est ok.
Par exemple, le programme a trouvé la barre avec l'ouverture à 1.4105 qui me convient.
Ensuite, le programme doit comparer cette barre avec la barre à sa gauche et à sa droite et si elle est plus basse, elle sera appropriée.
Artem, le truc ici, c'est qu'il y a une ligne comme celle-ci en dessous :
La façon dont vous avez suggéré n'a donc pas beaucoup de sens - si je comprends bien ce que veut Alex12.