任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 505

 
Forexman77:
你需要它,当然!那么,如何将这种结构应用于寻找最小值?我的大脑无法做到这一点)

为了找到最大值,变量val被赋予一个0的值(显然小于任何指标值)。

这意味着,为了找到最小值,我们必须故意增加一个更高的值。你可以使用EMPTY_VALUE 常数或直接在一些搜索最小值的条形上使用指标值。

val=EMPTY_VALUE;

for(i=1;i<=15;i++) {

    ind=iMA(...,i);

   if(ind< val) val=ind;

}

或者像这样。

val=MA(...,1);


for(i=2;i<=15;i++) {

    ind=iMA(...,i);

   if(ind< val) val=ind;

}
 
Forexman77:

当然,你需要这样做!那么,你如何将这种结构应用于寻找最小值?我无法通过头脑风暴弄清楚)。
而且我想学习如何声明一个数组。我是这样试的。

它的结果是-1。



循环经过34个值,而数组只包含33个单元,正确。

并尝试ArrayMinimum(num_array,WHOLE_ARRAY,0)。

 
Forexman77:

...我还想学习如何声明一个数组...

如果只是为了训练和认知的目的,...

确定最小和最大的周期--它应该是一个外部参数,以便进行调整和优化。

extern int p=34; 

所以,首先,声明的数组是没有大小的。

double val[];

数组的声明是在一个公共部分完成的,而不是在一个函数中。

在init函数中,大小被设置为数组。

int init(){

   ArrayResize(val,p);

} 

现在,在启动函数中,我们填充数组。

for(int i=0;i<p;i++) val[i]=iMA(...,i+1);

最后,ArrayMaximum() 和ArrayMinimum()被应用 于该数组。

 
Integer:

为了找到最大值,变量val被赋予一个0的值(显然小于任何指标值)。

这意味着,为了找到最小值,我们必须故意增加一个更高的值。你可以使用EMPTY_VALUE常数或直接在一些搜索最小值的条形上使用指标值。

或者像这样。

非常感谢您!
 
evillive:

循环经过34个值,而数组只包含33个单元格,修复它。

并尝试ArrayMinimum(num_array,WHOLE_ARRAY,0)

非常感谢您!
 

亲爱的程序员朋友们!我有麻烦了,请帮助我。

我已经为这个代码绞尽脑汁了。

//В условии прописано что работаем с 
if(OrderType() == OP_BUY){}
//, но метатрейдер почему то игнорирует это условие, и работает только с OP_SELLLIMIT

这里是整个函数。

//+------------------------------------------------------------------+
//| Модифицируем стоплоссы                                           |
//+------------------------------------------------------------------+   
void modify_stoploss()
  {
   for(int i=0; i<=OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderMagicNumber()==magic)
              {
               if(OrderType() == OP_BUY)
                 {
                  if(chek_way()==1)
                    {
                     double stoploss=NormalizeDouble(pre_openPrice(OP_BUY),Digits);
                     Print("Стоплосс для Бай ",OrderTicket()," = ", stoploss);
                     OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,OrderTakeProfit(),0,CLR_NONE);
                    }
                 }
               if(OrderType() == OP_SELL)
                 {
                  if(chek_way()==0)
                    {
                     stoploss=NormalizeDouble(pre_openPrice(OP_SELL),Digits);
                     Print("Стоплосс для Cелл ",OrderTicket()," = ", stoploss);
                     OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,OrderTakeProfit(),0,CLR_NONE);
                    }
                 }
              }
           }
        }
     }
  }

读取打印,这是它的输出结果。


而票据:225299700是一张OP_SELLLIMIT订单票

而且它如预期的那样修改了这个选定订单的止损。但是没有看到OP_BUY,尽管我确信它存在。

可能是什么问题?为什么它要这样对我?请帮助我理解!

 
#property strict
#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
extern int pos=1;
extern int sl=40;
extern int tp=70;
datetime time;
datetime time2;
bool trade=false;
bool trade2=false;
int a,b;
int OnInit()
  {
//---
   MA.Create(Symbol(),PERIOD_CURRENT,10,6,MODE_EMA,PRICE_CLOSE);//создал машку
//---
   return(INIT_SUCCEEDED);
   
  }
void OnTick()
  {
//---
  if(IsNewBar()==true)//если новый бар включаемся
     {
     if(buy(pos)==true)//если цена выше МА продолжаем
     {
      if(!ExistPositions(Symbol(),-1,-1,0))//если нету открых ордеров продолжаем
        {

         if(GetTypeLastClosePos(Symbol(),-1)!=OP_BUY)//если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена 
//все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО 
//       ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
           {
            trade=true;
           }
  if(trade==true)
        {
         OpenPosition(Symbol(),OP_BUY,0.1,Ask-sl*Point,Ask+tp*Point);
         trade=false;
        }
}
        }
    
     
if(sell(pos)==true)
{
   if(!ExistPositions(Symbol(),-1,-1,0))
     {

      if(GetTypeLastClosePos(Symbol(),-1)!=OP_SELL)
        {
         trade2=true;
        }

      if(trade2==true)
        {
         OpenPosition(Symbol(),OP_SELL,0.1,Bid+sl*Point,Bid-tp*Point);
         trade=false;
      }
  }}
 }
  }

//возвращает истину если закрытие бара  с указаной позицией выше МА

bool buy(int pos)
  {
   if(iClose(Symbol(),0,pos)>MA.Main(1))
      return true;
   else
      return false;
  }
//+------------------------------------------------------------------+
//| возвращает истину если закрытие бара  с указаной позицией ниже МА
//+------------------------------------------------------------------+
bool sell(int pos)
  {
   if(iClose(Symbol(),0,pos)<MA.Main(1))
      return true;
   else return false;
  }
除了两个买入和卖出条件外,所有的功能都来自于Kim的分支......,请告诉我哪里出错了......我需要每个交叉点有一个交易。
 

关于函数的另一个问题

/SetRectangle(clrBlue,"Прямоугольник",Time[10],Low[10],Time[0],High[0]);
//Если bk=true, то будет залит цветом, если false - то просто "рамка" ... sz при "просто рамка" - это ширина линий "рамки"
//

//+----------------------------------------------------------------------------+
void SetRectangle(color cl, string nm="", datetime t1=0, double p1=0, datetime t2=0, double p2=0, int sz=0, bool bk=true) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
   ObjectSet(nm, OBJPROP_TIME1   ,t1);
   ObjectSet(nm, OBJPROP_PRICE1  ,p1);
   ObjectSet(nm, OBJPROP_TIME2   ,t2);
   ObjectSet(nm, OBJPROP_PRICE2  ,p2);
   ObjectSet(nm, OBJPROP_COLOR   ,cl);
   ObjectSet(nm, OBJPROP_WIDTH   ,sz);
   ObjectSet(nm, OBJPROP_BACK    ,bk);
}

如何使一个矩形向前画而不是向后画,例如在指定的价格 上向前画5个柱子......,并且不重新画。

 
artmedia70:

我查了一下。谢谢你。

虽然问题中没有太多的信息。在这个月的小时条上有很多极端的情况。顺便说一下,究竟是什么的极值?


我假设只有两个月的极端值--最小和最大...好吧,不管怎样,起初是一个很长的代码,这就是为什么我请求帮助...但后来我恍然大悟,我设法把它装进四行。
 
请告诉我。在600以上的建筑中。经纪人能否给出真实的数量?