[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 163

 
polsvv 这就是魔法的作用。
 
vnn:

大家好...

能否请您告诉我如何建立MetaTrader 4历史文件的路径?像 "c:\program files\metatrader 4\history\alpari-classic\"?

https://docs.mql4.com/ru/files/FileOpenHistory
 

非常感谢你,Sergeev,我想我已经找到了......

Print("Terminal path: ", TerminalPath() + "\\history\\" + AccountServer() + "\\");

这一行输出的是正确的路径,尽管编辑器的颜色是错误的...你也许应该用记事本写代码。开个玩笑。

 

大家晚上好!

在谢尔盖-科瓦廖夫的教程中,我找到了一个专家--追踪止损。我把它复制到MetaEditor中,编译了它,但程序不能工作。请告知原因何在。也许我做错了什么。

 

它是用mql写的吗?)

只要给我代码。

 
伙计们,向我解释一下如何使用iCustom
我写道
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations", 1,0);
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0) 。
我不能把它弄好 ...
我有一个任务,从Bands指标的上下线中 获取信号......。确切地说是Bands.....
 
//-------------------------------------------------------------------- // modifystoploss.mq4 //旨在作为MQL4教程中的一个例子。 //-------------------------------------------------------------------- extern int Tral_Stop=10; // Dist. pursuit //--------------------------------------------------------------- 1 -- int start() // Special function start { string Symb=Symbol(); // Fin.工具 //--------------------------------------------------------------- 2 -- for(int i=1; i<=OrdersTotal(); i++) // 订单循环 { if (OrderSelect(i-1,SELECT_BY_POS)==true) // If there is a next { // 订单分析: int Tip=OrderType(); // 订单类型 if(OrderSymbol() !=Symb||Tip>1)continue;//不是我们的订单 double SL=OrderStopLoss(); //选定订单的SL //------------------------------------------------------ 3 -- while(true) //修改循环 { double TS=Tral_Stop; //初始值 int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL); //最小距离。 if (TS<Min_Dist) //如果有小于允许值,那么订单将被删除。
               TS=Min_Dist; // TS的新值 //--------------------------------------------------- 4 -- bool Modify=false; // 不指定修改 switch(Tip) // 按订单类型 { case 0 : // 买入订单 if (NormalizeDouble(SL,Digits)< // If lower desired.
                     NormalizeDouble(Bid-TS*Point,Digits)) { SL=Bid-TS*Point; // 然后修改它 string Text="Buy"; // 买入的文本 Modify=true; // 指定修改 } break; // exit if case 1 : // Sell order if (NormalizeDouble(SL,Digits)> // if above requested.
                     NormalizeDouble(Ask+TS*Point,Digits)|| NormalizeDouble(SL,Digits)==0)//或等于零 { SL=Ask+TS*Point; //然后修改它 Text="Sell"; // Modify=true; //指定修改 } }/结束开关 if (Modify=false) //如果没有修改 break; //退出 while //--------------------------------------------------- 5 -- double TP =OrderTakeProfit(); //选定订单的TP。
            double Price =OrderOpenPrice(); //所选订单的价格。 int Ticket=OrderTicket(); //所选订单的编号。 Alert ("Modify ",Text,Ticket,".Waiting for reply..."); bool Ans=OrderModify(Ticket,Price,SL,TP,0); //修改它!
            //--------------------------------------------------- 6 -- if (Ans=true) // It worked :) { Alert ("Order " ,Text,Ticket," modified:)"); break; // From loop modify.
              } //--------------------------------------------------- 7 -- int Error=GetLastError(); //失败了 :( switch(Error) //克服错误 { case 130:Alert("错误的停止。再试一次。"); RefreshRates(); //刷新数据 继续; //下一次迭代。iteration case 136:Alert("No price. Waiting for a new tick..."); while(RefreshRates()==false) // Till the new tick Sleep(1); // Delay in loop continue; // Next iteration case 146:Alert("The trading subsystem is busy.Try again"); Sleep(500); // Simple solution RefreshRates(); // Refresh data continue; // Next iteration // Critical errors case 2 : Alert("General error."); break; // Exit switch case 5 : Alert("Old client terminal version."); break; // Exit switch case 64 : Alert("Account blocked."); break; // Exit switch case 133:Alert("禁止交易"); break; // Exit switch default: Alert("Error ",Error);//Error } break; // end of modify loop } // end of modify loop //------------------------------------------------------ 8 -- } // end of order analysis //--------------------------------------------------------------- 9 -- return; // Exit start() } //-------------------------------------------------------------- 10 --
 
VOLDEMAR:
伙计们,向我解释一下如何使用iCustom
我写道
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations", 1,0);
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0) 。
我不能把它弄好 ...
我有一个任务,从Bands指标的上下线中获取信号......。 确切地说是Bands.....
https://docs.mql4.com/ru/indicators/iBands
 
FelixFX:

大家晚上好!

在谢尔盖-科瓦廖夫的教程中,我找到了一个专家--追踪止损。我把它复制到MetaEditor中,编译了它,但程序不能工作。请告知原因何在。也许我做错了什么。


使用这个。

在用户变量中,我们写道。

extern string   с9="------ Трейлингстоп ------";
extern int      TrailingStop=20; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нет
extern int      TrailingStep=5; //Шаг трала рыночного ордера
extern bool     WaitProfit = true; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить
                                    //Иначе, трейлинговать не дожидаясь положительного профита

extern string   с10=" -------- Прочие параметры -------------";
extern int      MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int      Proskalz=10;//Проскальзывание

在EA Start中写道。

// ----------------------------- Тралим ордера ------------------------------------
TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);

开始后在自定义子程序中写入。

// =================================================================================================
// ************************* Трейлинг рыночных ордеров *********************************************
// =================================================================================================


// =================  TrailingRyn() =============================================================
// функция осуществляет трейлинг рыночных ордеров 
// ----------------------------------------------
void TrailingRyn_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, int MAGIC, bool WaitProfit,  bool UseTrailingSound) {
  string SMB=Symbol(); 
  int i;
  int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);//Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах   
  int SchBuy=SchBuy(MAGIC);
  int SchSell=SchSell(MAGIC);
  if(ryn_TrStop>=MinLevel && ryn_TrStep>0 && (SchBuy>0 || SchSell>0)){    
    for (i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
      else {
        if (OrderSymbol()==SMB && OrderMagicNumber()==MAGIC){
          TrailingPositions_b(ryn_TrStop,ryn_TrStep,Proskalz,WaitProfit,UseTrailingSound);
        }
      }
    }
  }
 if(ryn_TrStop>=MinLevel && ryn_TrStep==0)
 Alert("Трейлинг невозможен - ryn_TrStep==0");
} 
// =================================================================================================

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, bool WaitProfit, bool UseTrailingSound){
  if(OrderType()==OP_BUY){
    if(!WaitProfit || (Bid-OrderOpenPrice())>ryn_TrStop*Point){
      if (OrderStopLoss()<Bid-(ryn_TrStop+ryn_TrStep-1)*Point){
        ModifyStopLoss_b(Bid-ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
  if(OrderType()==OP_SELL){
    if(!WaitProfit || OrderOpenPrice()-Ask>ryn_TrStop*Point) {
      if(OrderStopLoss()>Ask+(ryn_TrStop+ryn_TrStep-1)*Point || OrderStopLoss()==0){
        ModifyStopLoss_b(Ask+ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss_b(double ldStopLoss, bool UseTrailingSound){
  bool fm=false;
  string NameTrallingSound  = "ok.wav";// Наименование звукового файла для трейлинга
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if(fm!=0 && fm!=-1){
    if(UseTrailingSound) { PlaySound(NameTrallingSound);}
  }   
  if(fm==0 || fm==-1) { ModifError();}
}
//+------------------------------------------------------------------+

像ModifError()这样的函数是我的自定义函数--它们只是显示一个错误信息。写下你自己的信息,而不是。

 
谢谢你 .... 如果它对我有帮助,我就不会问这个问题了.............。