[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 447

 
T-G >>:

а почему как функция не работает а в старте работает?

En fait, c'est une fonction seulement cela dépend de ce qu'il est if(Close_){ - appliquer à l'intérieur du départ, if void Close_() { comme une fonction qui fonctionne à l'extérieur du départ.


void Close_() {
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
OrderSelect( trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
}
Sleep(1000);
}
}
}
 
sergeev >>:


алгоритм у вас верный. сделайте распринтовку возможных ошибок и вообще ухзнать куда доходит эксперт при выполнении этого кода.

+ выведите расчитанные значения рси.

)))) Je pense que le gars a une erreur dans le code..... bien que je sois un débutant, je peux me tromper.

 
Il ne semble pas y avoir d'erreur, juste un petit bug, et Sleep est inutile ici :)
 
gince >>:

//во внешние перменные
extern bool Close_ =true; //использовать закрытие по РСИ вкл выкл. 
// в старт закиньте
if ( Close_){
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
OrderSelect( trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if ((OrderType() == OP_BUY)&&( rsi_1 > Level_2 && rsi_0 < Level_2)) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
if ((OrderType() == OP_SELL)&&( rsi_1 < Level_1 && rsi_0 > Level_1)) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
}
Sleep(1000);
}
}
}
 

C'est un Matsimple standard. J'essaie juste de comprendre pourquoi ça ne se ferme pas correctement. J'essaie la logique de fermeture des transactions. Une partie est constituée de RSI... c'est pour ça que ça ne marche pas.


//if(Open[1]>ma_2 && Close[1]<ma_2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         if( rsi_1 > Level_2 && rsi_0 < Level_2) {OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         Print( rsi_0,"     ", rsi_1);}
         break;
        }
      if(OrderType()==OP_SELL)
        {
         //if(Open[1]<ma_2 && Close[1]>ma_2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         if( rsi_1 < Level_1 && rsi_0 > Level_1){OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
          Print( rsi_0,"     ", rsi_1);}
         break;

J'ai changé le shifft après l'impression.

rsi_0=iRSI( NULL,0,4, PRICE_CLOSE, 1 ); 
rsi_1=iRSI( NULL,0, 4, PRICE_CLOSE, 2 ) ;
 
Gourous respectés !
Ne laissez pas cela passer inaperçu.

J'ai acheté un ordinateur portable HP avec Windows Vista préinstalléavec un système d'exploitation 64 bits.
J'ai commencé à avoir des problèmes avec le travail de l'EA. Au début, mes affaires ont été ouvertes d'une manière ou d'une autre. Mais en une semaine, mon conseiller expert a complètement cessé d'ouvrir certaines transactions. Nous l'avons essayé et tordu et avons finalement décidé que le problème était causé par les 64 bits. Nous avons réinstallé l'Expert Advisor et l'avons installé sur des Windows 32 bits et 7.Il a bien fonctionné pendant un jour, puis a de nouveau échoué. Peut-être que j'ai une mise à jour de Windows qui l'affecte ?

Sur d'autres ordinateurs (collègues), l'EA fonctionne sans la moindre interruption. Mon ancien ordinateur portable est parti et je ne peux rien acheter pour le moment.

Je travaille d'ailleurs sur la plateforme Instatrader.

Si quelqu'un a rencontré ce problème ou a des suggestions sur la façon de le résoudre, veuillez nous en informer.

 

Aidez-moi à refaire une simple EA, je me bats depuis une semaine !!!!. Ou bien écrivez-le à nouveau, tous les EA sont trop compliqués et je ne peux pas le modifier pour moi !

Je veux ajouter à cet EA un indicateur MACD, qui envoie ses signaux d'achat et de vente et l'EA doit faire les deux en même temps. Il ne doit pas y avoir plus de trois ordres d'achat et trois ordres de vente ouverts. Tous les ordres doivent être fermés uniquement par le stoploss et le takeprofit, et non par la force du conseiller expert.

//--------------------------------------------------------------------
extern int     period_EMA           = 28,
               period_WMA           = 8 ,
               stoploss             = 50,
               takeprofit           = 50,
               risk                 = 10;
double  LOT;
//--------------------------------------------------------------------
double SL, TP;
int TimeBar; //глобальная переменная
//--------------------------------------------------------------------
int start()
{
   if ( TimeBar==Time[0]) return(0);
   if ( TimeBar==0) { TimeBar=Time[0];return(0);}//первый запуск программы
   double EMA0 = iMA(NULL,0, period_EMA,0,MODE_EMA, PRICE_OPEN,0);
   double WMA0 = iMA(NULL,0, period_WMA,0,MODE_LWMA,PRICE_OPEN,0);
   double EMA1 = iMA(NULL,0, period_EMA,0,MODE_EMA, PRICE_OPEN,1);
   double WMA1 = iMA(NULL,0, period_WMA,0,MODE_LWMA,PRICE_OPEN,1);
   if ( EMA0< WMA0&& EMA1> WMA1) //Buy
   {
      TimeBar=Time[0];                            
      TP  = Ask + takeprofit*Point;
      SL  = Ask - stoploss*Point;     
      LOT = LOT( risk,1);
      CLOSEORDER("Sell");
      OPENORDER ("Buy");
   }
   if ( EMA0> WMA0&& EMA1< WMA1) //Sell
   {
      TimeBar=Time[0];                            
      TP = Bid - takeprofit*Point;
      SL = Bid + stoploss*Point;            
      LOT = LOT( risk,1);
      CLOSEORDER("Buy");
      OPENORDER ("Sell");
   }
return(0);
}
//--------------------------------------------------------------------
void CLOSEORDER(string ord)
{
   for (int i=OrdersTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);// Close Buy
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);// Close Sell
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   if ( ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,2, SL, TP,"", 1,3);
   if ( ord=="Sell") error=OrderSend(Symbol(),OP_SELL, LOT,Bid,2, SL, TP,"",-1,3);
   if ( error==-1) //неудачная покупка OK
   {  
      ShowERROR( error,0,0);
   }
return;
}                  
//--------------------------------------------------------------------
void ShowERROR(int Ticket,double SL,double TP)
{
   int err=GetLastError();
   switch ( err )
   {                  
      case 1:                                                                               return;
      case 2:   Alert("Нет связи с торговым сервером   "              , Ticket," ",Symbol());return;
      case 3:   Alert("Error  неправильные параметры   Ticket ",       Ticket," ",Symbol());return;
      case 130: Alert("Error близкие стопы   Ticket ",                 Ticket," ",Symbol());return;
      case 134: Alert("Недостаточно денег   ",                         Ticket," ",Symbol());return;
      case 146: Alert("Error Подсистема торговли занята ",             Ticket," ",Symbol());return;
      case 129: Alert("Error Неправильная цена ",                      Ticket," ",Symbol());return;
      case 131: Alert("Error Неправильный объем ",                     Ticket," ",Symbol());return;
      case 4051:Alert("Error Недопустимое значение параметра функции ", Ticket," ",Symbol());return;
      case 4105:Alert("Error Ни один ордер не выбран ",                Ticket," ",Symbol());return;
      case 4063:Alert("Error Ожидается параметр типа integer ",        Ticket," ",Symbol());return;
      case 4200:Alert("Error Объект уже существует ",                  Ticket," ",Symbol());return;
      default:  Alert("Error  " , err,"   Ticket ",                     Ticket," ",Symbol());return;
   }
}
//--------------------------------------------------------------------
double LOT(int risk,int ord)
{
   double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   LOT = AccountFreeMargin()* risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ ord;
   if ( LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if ( LOT< MINLOT) LOT = MINLOT;
   if ( MINLOT<0.1) LOT = NormalizeDouble( LOT,2); else LOT = NormalizeDouble( LOT,1);
   return( LOT);
}
//--------------------------------------------------------------------

 
Serg-s-n >>:

Помогите переделать простой советник, бьюсь неделю!!!! Или написать снова, а то все советники слишком сложные и я их не могу под себя подстроить!!

Суть такая: Хочу добавить в этот советник( торгующий на пересечении) ещё индикатор MACD, который подает свой сигнал на продажу и покупку и советник должен параллельно выполнять их. Открытых ордеров BUY не больше трех и SELL тоже трех. Все ордера должны закрываться только по stoploss и takeprofit, а не принудительно советником.

 double MacdMain0 = iMACD(NULL,0, period_fast, period_slow, period_signal,0,MODE_MAIN, PRICE_OPEN,0);
double MacdSignal0 = iMACD(NULL,0, period_fast, period_slow, period_signal,0,MODE_SIGNAL, PRICE_OPEN,0)
double MacdMain1 = iMACD(NULL,0, period_fast, period_slow, period_signal,0,MODE_MAIN, PRICE_OPEN,1)
double MacdSignal1 = iMACD(NULL,0, period_fast, period_slow, period_signal,0,MODE_SIGNAL, PRICE_OPEN,1);
if (EMA0< WMA0&& EMA1> WMA1 && MacdMain0 >MacdSignal0 && MacdMain1 <MacdSignal1)

bien ceci ajoutera des macd comme des muwings

 
Tout est clair avec cela, mais comment régler les commandes ? Dans la version originale, par exemple, nous définissons l'achat, et quand un signal de vente est reçu, l'achat est fermé et la vente est définie ! Et je n'ai pas besoin de fermer, le conseiller expert doit définir des ordres avec des arrêts et c'est tout !
 

J'ai une question, ou plutôt une demande, sur le même EA EMA_WMA.mq4 et aussi concernant la fermeture. Est-il possible, au lieu de fermer par Take Profit ou en plus de cela, d'ajouter la possibilité de fermer un ordre par la valeur max/min de la MA. Il me semble que ce serait la meilleure façon de sortir du marché, (mais je peux me tromper bien sûr). Veuillez ajouter cette fonctionnalité à cet EA.

Autre petite question, je reçois un message comme celui-ci : "Error. Stops close", bien que mon stop loss soit fixé à 50 pips (MasterForex). Qu'est-ce que cela signifie ?