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

 

大家好!

我似乎无法在交易报告中正确加载存款。))我这样做。

#define RA 10000

if(Trade_Report == TRUE && !IsOptimization())
   {  int      pos;
      int      handle;
      int      Days;
      double   Swap_M;
      double   Profit_M;
      double   Swap_P;
      double   Profit_P;

      double   Source_LP[RA], LP_01[RA], LP_02[RA], LP_03[RA], LP_04[RA], LP_05[RA], LP_06[RA];
      double   Source_LP_02[RA], LP_01_02[RA], LP_02_02[RA], LP_03_02[RA], LP_04_02[RA], LP_05_02[RA], LP_06_02[RA];
      double   Source_SP[RA], SP_01[RA], SP_02[RA], SP_03[RA], SP_04[RA], SP_05[RA], SP_06[RA];
      double   Source_SP_02[RA], SP_01_02[RA], SP_02_02[RA], SP_03_02[RA], SP_04_02[RA], SP_05_02[RA], SP_06_02[RA];
      double   Load_Depo[RA]; 
   
      handle = FileOpen("OrdersReport.csv",FILE_CSV|FILE_WRITE);
   
      if(handle > 0)
                {//1
            FileWrite(handle,"Time Close"+","+"Lots"+","
                              +"Swap($)"+","+"Profit($)"+","+"Swap(p)"+","+"Profit(p)"+","+"Load Depo"+","
                              +"SOURCE_LP"+","+"LP#01"+","+"LP#02"+","+"LP#03"+","+"LP#04"+","+"LP#05"+","+"LP#06"+","
                              +"SOURCE_SP"+","+"SP#01"+","+"SP#02"+","+"SP#03"+","+"SP#04"+","+"SP#05"+","+"SP#06");
            for(pos = 0; pos < OrdersHistoryTotal(); pos++)
               {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); //2
               
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_Source_LP && OrderCloseTime() == TimeCurrent()) { Source_LP[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP01 && OrderCloseTime() == TimeCurrent()) { LP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP02 && OrderCloseTime() == TimeCurrent()) { LP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP03 && OrderCloseTime() == TimeCurrent()) { LP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP04 && OrderCloseTime() == TimeCurrent()) { LP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP05 && OrderCloseTime() == TimeCurrent()) { LP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP06 && OrderCloseTime() == TimeCurrent()) { LP_06[pos] = OrderProfit(); }
                     
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP && OrderCloseTime() == TimeCurrent()) { Source_SP[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP01 && OrderCloseTime() == TimeCurrent()) { SP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP02 && OrderCloseTime() == TimeCurrent()) { SP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP03 && OrderCloseTime() == TimeCurrent()) { SP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP04 && OrderCloseTime() == TimeCurrent()) { SP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP05 && OrderCloseTime() == TimeCurrent()) { SP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP06 && OrderCloseTime() == TimeCurrent()) { SP_06[pos] = OrderProfit(); }
                  
            //--- Вычисление загрузки депозита ---//
                  int              Amount_LD;
                  datetime         CurrentCloseTime = OrderCloseTime();
                  static datetime  CloseTime;                  
                  
                  if(CurrentCloseTime != CloseTime)
                     { Amount_LD = 1;
                       Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                       CloseTime = OrderCloseTime(); }
                  else if(CurrentCloseTime == CloseTime)
                          { Amount_LD++;
                            Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                            CloseTime = OrderCloseTime(); }
            //---------------------------------------------------------------------------------------------------------------------
                     
                  Swap_M     =  OrderSwap();
                  Profit_M   =  OrderProfit();
                  Swap_P     = (OrderSwap()/10)/OrderLots();
                  Profit_P   = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots();
                     
                  if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                     {   FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+DoubleToStr(OrderLots(),2)+"," //3
                                          
                                          +DoubleToStr(OrderSwap(),2)+","+DoubleToStr(Profit_M+Swap_M,2)+","+DoubleToStr(Swap_P,2)+","
                                          +DoubleToStr(Profit_P,2)+","+DoubleToStr(Load_Depo[pos],2)+","
                                          
                                          +DoubleToStr(Source_LP[pos],2)+","+DoubleToStr(LP_01[pos],2)+","+DoubleToStr(LP_02[pos],2)+","
                                          +DoubleToStr(LP_03[pos],2)+","
                                          +DoubleToStr(LP_04[pos],2)+","+DoubleToStr(LP_05[pos],2)+","+DoubleToStr(LP_06[pos],2)+","
                                             
                                          +DoubleToStr(Source_SP[pos],2)+","+DoubleToStr(SP_01[pos],2)+","+DoubleToStr(SP_02[pos],2)+","
                                          +DoubleToStr(SP_03[pos],2)+","
                                          +DoubleToStr(SP_04[pos],2)+","+DoubleToStr(SP_05[pos],2)+","+DoubleToStr(SP_06[pos],2));  } //3
               }  FileClose(handle); //2
         }//1

因此,它最初的计算是不正确的。数组Load_Depo 中的数值不断变化,需要,开放的位置 也被考虑。谁能给我举个例子,如果你有空闲时间的话。))

 
demlin:
说实话,我不明白,这太复杂了)))。
连测试脚本中的例子都没有帮助?
 
FreeSerfer:

谢谢,观点很明确,很抱歉,我对编程语言不是很在行。

假设。

蓝色 - 数字0 - 买入信号

红色--1号--卖出信号

还有一个问题,箭头在形成条形的时候可以闪烁,在条形上面可以锁定并给出信号。交易应在信号形成后开启。

谁能在代码中实现这一点?

你是在研究编程还是在找人帮你做?

维克多已经解释过,应该使用iCustom()函数。请在MetaEditor的帮助中阅读相关信息。那里的内容相当详细。为了避免 "飘动"--在iCustom()中使用第一个条形的数据而不是零--它已经完全形成。

当你开始自己写东西时,你会很高兴在这里得到帮助和纠正......

 
artmedia70:

你是在学习编程还是在找人帮你做?

维克多已经清楚地告诉你,你需要使用iCustom()函数。请在MetaEditor的帮助中阅读相关信息。那里的内容相当详细。为了摆脱 "喋喋不休"--在iCustom()中使用第一条杠的数据而不是零条杠--它已经完全形成。

当你开始自己写东西时,那么他们会在这里愉快地帮助你,并会纠正任何东西......

我自己写的,虽然对我来说很难,唯一剩下的是专家顾问与指标的绑定,虽然感谢维克多,但通过我自己的努力,很快就能解决这个问题。无论如何,感谢所有回应并为我指明前进方向的人。
 
peshihod:

可以有无数的选择。最好是选择简单的。比如说。


int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

帮助.... 回答问题..............

这是每次勾选时 都会触发的部分

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


而且,它应该只在每个新开的订单中被触发一次。

也许你需要添加一些计数器,通过刻度、魔力或其他命令的标识符?

----------------------------------------------------------------------------------------

我们必须创建一个变量Orderov吗?
我可以这样做吗?

for(i=0;i<OrdersTotal();i++)

你在脚本中需要一个变量 "k "吗?

int i,k;

 
Zhunko:
即使是测试脚本中的例子也没有帮助?
谢谢你的反馈,以不同的、更简单的方式解决了这个问题))
 
semiromid:

这是每次勾选时都会触发的部分

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


而且它应该只在每个新开的订单中被触发一次。

也许应该有一个附加的计数器,通过刻度、魔力或其他顺序标识符?

----------------------------------------------------------------------------------------

我们必须要做一个变量Orderov吗?
我们可以这样做吗?

for(i=0;i<OrdersTotal();i++)

脚本需要一个变量 "k"?

你完全搞错了。

你试图用德语写诗,却一个字都不认识。我说清楚了吗?

阅读参考资料,学习该语言的所有功能和属性。这要花上几个月的时间。使用MetaTrader4的安装中所包含的例子。然后我们再谈。你还不知道我们在说什么。

 
peshihod:

你完全搞错了。

试图在不认识一个字的情况下用德语创作诗歌。我说清楚了吗?

阅读参考资料,学习该语言的所有功能和属性。这要花上几个月的时间。使用MetaTrader4的安装中所包含的例子。然后我们再谈。你还不知道我们在谈论什么。


我是一个编程初学者,我没有老师。如果你很难回答对我来说很重要的问题,你可以不给我写信。

而我对你的称呼是你,其实.....。

 
semiromid:


我是一个编程初学者,我没有老师。如果你很难回答对我来说很重要的问题,你可以什么都不写给我。

而我对你的称呼是你,其实.....。


我很抱歉。

我写过,你无法学会上岸游泳。

 
peshihod:


请原谅我。

我写过,你无法学会上岸游泳。


有时你必须提出问题才能了解一些情况。

int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

帮助.... 回答问题..............

这是触发每一次勾选 的部分。

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


它应该只在每次开出新订单时被触发,一次。

也许我需要附加一些计数器,通过刻度、魔力或其他订单标识符,或者是数组?我不知道这与它有什么关系,在我弄清楚之前,我无法向前迈进。

----------------------------------------------------------------------------------------

我们必须要做一个变量Orderov吗?
我可以这样做吗?

for(i=0;i<OrdersTotal();i++)

脚本是否需要一个变量 "k"?

int i,k;