并让我们把它做成一个 "卡通"(多货币)。 - 页 12

 
Swan >> :

像这样。

>> 谢谢你。

 

我想知道现在的专业......为我的专家......)

英镑、欧元、奇夫、新西兰人、加拿大人、澳大利亚人......都处于准备就绪的状态)

你可以尝试以某种方式连接......做一个总体分析......。如果所选对子的方向重合,那么打赌...

 
ALex2008 >> :

谢谢你...

这就是它应该有的样子。


      CheckBU=false;
      if( Type==0 && Stop> OpenPrise) CheckBU=true;
      if( Type==1 && Stop< OpenPrise) CheckBU=true;  

没有它也可能工作,它更可靠 :)


if (( Type<=1)&&( Stop==0|| Stop!= StopLoss))       SetStop();

StopLoss在函数SetStop()中计算。这将是与

if ( Type<=1)       SetStop();
 
Swan >> :

StopLoss在函数SetStop()中计算。这将是与

不,那是不同的...这不是一个适当的检查,但它是为了检查左止点......它应该是这样的

或者这样。

StopLoss=MathMax(b0,b1);
>>或这个

StopLoss=MathMin(s0,s1);

这就是为什么第一个StopLoss等于-0的原因。


if(!WorkOrders()){
      StopLoss=0;

然后是上面的价值观之一...如果停止完全是这样的,就不会再被检查...

天鹅>>

也许不这样做也行,这样更安全 :)

已更正)。





 
Swan >> :

如果(Type<=1)SetStop()。

如果你一下子把它送到那里......那么每4个小时就会有新的参数用于停止(b1,s1,b0,s0)......它就会改变......

 

试图以人性化的方式来写...来解决...

停止检查中增加了 一个逻辑 变量mod ...

//+------------------------------------------------------------------+
//|                                                    CandyLite.mq4 |
//|                                                    Ш.Александр.В |
//|                                              shestovav@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Ш.Александр.В"
#property link      "shestovav@gmail.com"

#include <stdlib.mqh>

extern double Profit    = 3000;
extern double Lot       = 0.1;
extern bool BU          = true;
extern double BUenter   = 150;
extern double BUstop    = 10;


int Type, Ticket;
double OpenPrise, EnterBU, StopLossBU, SLmax, Stop, StopLevel, b1, s1, b0, s0, StopLoss, Enter;
bool mod, CheckBU;

int init(){
   Profit*=Point; 
   BUenter*=Point;
   BUstop*=Point;
   return(0);
  }

int deinit() {
   return(0);
  }

int start() {
   StopLevel=Point*MarketInfo(Symbol(),MODE_STOPLEVEL);   // вычисление стоплевел //Point*
   
   if(! WorkOrders()){
      mod=false;
      StopLoss=0;
      StopLossBU=0;
      UpTrend();
      DownTrend();
   }
      
   if( WorkOrders()){
      if (( Type<=1)&&( Stop==0||! mod))                 SetStop();
      if (( BU==true)&&( Type<=1)&&(! CheckBU))          SetBU();
      if (( Type==1)||( Type==5))                       UpTrend();
      if (( Type==0)||( Type==4))                       DownTrend();
      //Comment("SL=", );
   }

   return(0);
  }
//-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
void UpTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) <= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) > 0)){
         Enter=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
         SLmax=iLow(NULL,PERIOD_H4,1)-10*Point;
         if(IsTradeAllowed()){
            DellAllOrders();
            if( Enter-Ask> StopLevel-0.5*Point){
               OrderSend(Symbol(), OP_BUYSTOP, Lot, Enter, 0, SLmax, Enter+ Profit, 0, 0,0, Green);}
         else Sleep(1000);
         }
      }
  }
void DownTrend(){
     if((iOpen(NULL,PERIOD_H4,1) - iClose(NULL,PERIOD_H4,1) >= 0) &&
        (iOpen(NULL,PERIOD_H4,2) - iClose(NULL,PERIOD_H4,2) < 0)){
         Enter=iLow(NULL,PERIOD_H4,1)-10*Point;
         SLmax=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
         if(IsTradeAllowed()){
            DellAllOrders();
            if(Bid- Enter> StopLevel-0.5*Point){
               OrderSend(Symbol(), OP_SELLSTOP, Lot, Enter, 0, SLmax, Enter- Profit, 0, 0,0, Green);}
         else Sleep(1000);
         }
      }
  }

//-------Вычисление стопа и установка
void SetStop(){
      RefreshRates();
      b0=iLow(NULL,PERIOD_H4,0)-10*Point;
      s0=iHigh(NULL,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      b1=iLow(NULL,PERIOD_H4,1)-10*Point;
      s1=iHigh(NULL,PERIOD_H4,1)+(Ask-Bid)+10*Point;
            
         if( Type==0){
            StopLoss=MathMax( b0, b1);
            if( Stop!= StopLoss) mod=OrderModify( Ticket, OpenPrise, StopLoss,OrderTakeProfit(),0,Red);
            else mod=true;
         }
         if( Type==1){
            StopLoss=MathMin( s0, s1);
            if( Stop!= StopLoss) mod=OrderModify( Ticket, OpenPrise, StopLoss,OrderTakeProfit(),0,Red);
            else mod=true;
         }
   }

//-------Вычисление бу и установка
void SetBU(){
      if( Type==0){
         EnterBU= OpenPrise+ BUenter;
         StopLossBU= OpenPrise+ BUstop;
         RefreshRates();
         if(Bid>= EnterBU){
            StopLoss= StopLossBU;
            OrderModify( Ticket, OpenPrise, StopLossBU,OrderTakeProfit(),0,Red);}
      }
      if( Type==1){
         EnterBU= OpenPrise- BUenter;
         StopLossBU= OpenPrise- BUstop;
         RefreshRates();
         if(Ask<= EnterBU){
            StopLoss= StopLossBU;
            OrderModify( Ticket, OpenPrise, StopLossBU,OrderTakeProfit(),0,Red);}
      }
}
   
//-------Удаление всех ордеров, открытых и отложенных
void DellAllOrders(){
      if( WorkOrders()){
      if( Type<=1)OrderClose( Ticket,OrderLots(),OrderClosePrice(),10);
      else OrderDelete( Ticket);}
  }
  
//-------Поиск ордеров
bool WorkOrders(){
      for (int i=OrdersTotal()-1; i>=0; i--){
      if (!OrderSelect( i, SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())        continue;
      OpenPrise=OrderOpenPrice();
      Type     =OrderType();
      Ticket   =OrderTicket();
      Stop     =OrderStopLoss();
      CheckBU=false;
      if( Type==0 && Stop> OpenPrise) CheckBU=true;
      if( Type==1 && Stop< OpenPrise) CheckBU=true;
      return(true);}
  return(false);
  }
  
 
我也会试着提出我的观点,而不是以任何方式强加于人!!。
我没有强求什么!!跟踪止损、无损和其他智慧是绝对没有必要的,这都是为了初学者的利益。
这都是为了初学者和经纪公司的利润,专家顾问和系统本身应该尽可能的简单。
指标、水平等完全没有区别。
最重要的是要有严格的卖出和买入规则,该系统是可逆的,也就是说,永远在市场上!
再一次,这是我的观点 !
 
ALex2008 >> :

试图以人性化的方式来写...来解决...

在停止检查中增加了一个逻辑变量mod...


检查,添加MOD和检查错误

附加的文件:
candylite.mq4  5 kb
 
AAE >> :
我也会试着提出我的观点,而不是以任何方式强加于人!!。
我没有强求什么!!跟踪止损、无损和其他智慧是绝对没有必要的,这都是为了初学者的利益。
这都是为了初学者和经纪公司的利润,专家顾问和系统本身应该尽可能的简单。
指标、水平等完全没有区别。
最重要的是要有严格的卖出和买入规则,该系统是可逆的,也就是说,永远在市场上!
再一次,这是我的观点 !

完全不同意你的观点 :)