返回列表 上一主題 發帖

[發問] 迴圈問題

回復 1# spermbank


    基本的運算總該要提供一下吧~
    哪些欄位的計算是哪些值進行運算~
    並不是所有人都懂~ 這些是怎麼運算滴唷~
學習才能提升自己

TOP

回復 3# spermbank


     這個不是程式運用的問題~
     這是一個運算的問題~
學習才能提升自己

TOP

本帖最後由 hugh0620 於 2012-3-22 10:35 編輯

回復 3# spermbank

這是你需要去思考~ 哪一些是運算中動數(x)=>穫利1%的新股價~ 在賣出價的時候
所以~ 買價是一個既定的事實情況下~ 去推算[穫利1%的新股價]
因此第二個迴圈~ 我用的是 do  loop
先求得基本的參數值
1. 買:股價/手續費
再依買的股價依股價原則一個值一格個值去推算小於或等於1%獲利股價
2.用do loop去推算賣出的股價
  1. Sub nn()

  2. '=========================='調整C區股價規則
  3. For Each A In Range("A:A").SpecialCells(xlCellTypeConstants, xlNumbers)
  4. B = Application.Lookup(A, Array(0, 11, 51, 101, 501, 1001), Array(0.01, 0.05, 0.1, 0.5, 1, 5))
  5. A.Offset(, 2) = Application.Ceiling(A, B)
  6. Next
  7. '=========================='獲利1%股利計算,不包含手續費、證交稅
  8. Sheets("Sheet1").Select
  9. x = Application.WorksheetFunction.CountA(Range("A:A")) '欄位有值範圍計算
  10. For i = 2 To x
  11.     Cells(i, "G") = Cells(i, "C") * Cells(9, "O") + Cells(i, "C")
  12. Next
  13. '=========================='調整獲利股價規則
  14. For Each A In Range("G:G").SpecialCells(xlCellTypeConstants, xlNumbers)
  15. B = Application.Lookup(A, Array(0, 11, 51, 101, 501, 1001), Array(0.01, 0.05, 0.1, 0.5, 1, 5))
  16. A.Offset(, 0) = Application.Ceiling(A, B)
  17. Next
  18. '=========================='計算獲利1%扣除手續費與證交稅金額
  19. Sheets("Sheet1").Select
  20. x = Application.WorksheetFunction.CountA(Range("A:A")) '欄位有值範圍計算

  21. For i = 2 To x
  22.         K = Cells(i, "C")    '買進股價,是一個固定值的條件下,推算穫利接接近1%時的股價及獲利
  23.         If K * 1000 * 0.001425 * 0.28 <= 20 Then '買進手續費是一個已發生的條件,若低於20圓,則為20圓,
  24.             ABuyP = 20
  25.         Else
  26.             ABuyP = B * 1000 * 0.001425 * 0.28
  27.         End If
  28.         ABuy = K * 1000 + ABuyP
  29.         B1 = Application.Lookup(K, Array(0, 11, 51, 101, 501, 1001), Array(0.01, 0.05, 0.1, 0.5, 1, 5)) '股價增加比率
  30.         J = 0
  31.         Do
  32.         B2 = B1 * J
  33.         If (K + B2) * 1000 * 0.001425 * 0.28 <= 20 Then '賣出手續費若低於20圓,則為20圓
  34.             ABuyP1 = 20
  35.         Else
  36.             ABuyP1 = (K + B2) * 1000 * 0.001425 * 0.28
  37.         End If
  38.         ASell = (K + B2) * 1000 - (K + B2) * 1000 * 0.003 - ABuyP1
  39.         A = (ASell - ABuy) / ABuy
  40.         J = J + 1
  41.         Loop While A <= 0.01     '貨利在>=0.01時,停止運算
  42.         Cells(i, "K") = K + B2 - B1 '計算獲利扣除手續費與證交稅的獲利%數
  43.         Cells(i, "L") = (((K + B2 - B1) * 1000 - (K + B2 - B1) * 1000 * 0.003 - ABuyP1) - ABuy) / ABuy
  44.         Cells(i, "M") = (((K + B2 - B1) * 1000 - (K + B2 - B1) * 1000 * 0.003 - ABuyP1) - ABuy) '計算獲利扣除手續費與證交稅的獲利金額
  45. Next


  46. End Sub
複製代碼
學習才能提升自己

TOP

本帖最後由 hugh0620 於 2012-3-26 09:26 編輯

回復 3# spermbank


    任何求解後~ 要再進行驗算~
    已確保我們的設計所計算出來的結果是符合我們運算的邏輯
    以下圖N~S欄是驗算的結果~
    提供N~S欄第二列的公式給你複算
    N2=IF(C2* 1000 * 0.001425 * 0.28 <= 20,20,C2* 1000 * 0.001425 * 0.28 )
    O2=C2*1000+N2
    P2=IF(K2* 1000 * 0.001425 * 0.28 <= 20,20,K2* 1000 * 0.001425 * 0.28)
   Q2=K2 * 1000 - K2* 1000 * 0.003-P2
    R2=(Q2-O2)/O2
    S2=Q2-O2
學習才能提升自己

TOP

本帖最後由 hugh0620 於 2012-3-26 09:25 編輯

回復 7# spermbank

很抱歉唷~ 程式碼打錯一個字  將第28列b改成K 就可以了
ABuyP = b * 1000 * 0.001425 * 0.28
ABuyP = K * 1000 * 0.001425 * 0.28
  1. Sub nn()

  2. '=========================='調整C區股價規則
  3. For Each A In Range("A:A").SpecialCells(xlCellTypeConstants, xlNumbers)
  4. B = Application.Lookup(A, Array(0, 11, 51, 101, 501, 1001), Array(0.01, 0.05, 0.1, 0.5, 1, 5))
  5. A.Offset(, 2) = Application.Ceiling(A, B)
  6. Next
  7. '=========================='獲利1%股利計算,不包含手續費、證交稅
  8. Sheets("Sheet1").Select
  9. x = Application.WorksheetFunction.CountA(Range("A:A")) '欄位有值範圍計算
  10. For i = 2 To x
  11.     Cells(i, "G") = Cells(i, "C") * Cells(9, "O") + Cells(i, "C")
  12. Next
  13. '=========================='調整獲利股價規則
  14. For Each A In Range("G:G").SpecialCells(xlCellTypeConstants, xlNumbers)
  15. B = Application.Lookup(A, Array(0, 11, 51, 101, 501, 1001), Array(0.01, 0.05, 0.1, 0.5, 1, 5))
  16. A.Offset(, 0) = Application.Ceiling(A, B)
  17. Next
  18. '=========================='計算獲利1%扣除手續費與證交稅金額
  19. Sheets("Sheet1").Select
  20. x = Application.WorksheetFunction.CountA(Range("A:A")) '欄位有值範圍計算

  21. For i = 2 To x
  22.         K = Cells(i, "C")    '買進股價,是一個固定值的條件下,推算穫利接接近1%時的股價及獲利
  23.         If K * 1000 * 0.001425 * 0.28 <= 20 Then '買進手續費是一個已發生的條件,若低於20圓,則為20圓,
  24.             ABuyP = 20
  25.         Else
  26.             ABuyP = K * 1000 * 0.001425 * 0.28
  27.         End If
  28.         ABuy = K * 1000 + ABuyP
  29.         B1 = Application.Lookup(K, Array(0, 11, 51, 101, 501, 1001), Array(0.01, 0.05, 0.1, 0.5, 1, 5)) '股價增加比率
  30.         J = 0
  31.         Do
  32.         B2 = B1 * J
  33.         If (K + B2) * 1000 * 0.001425 * 0.28 <= 20 Then '賣出手續費若低於20圓,則為20圓
  34.             ABuyP1 = 20
  35.         Else
  36.             ABuyP1 = (K + B2) * 1000 * 0.001425 * 0.28
  37.         End If
  38.         ASell = (K + B2) * 1000 - (K + B2) * 1000 * 0.003 - ABuyP1
  39.         A = (ASell - ABuy) / ABuy
  40.         J = J + 1
  41.         Loop While A <= 0.01     '貨利在>=0.01時,停止運算
  42.         Cells(i, "K") = K + B2 - B1 '計算獲利扣除手續費與證交稅的獲利%數
  43.         Cells(i, "L") = (((K + B2 - B1) * 1000 - (K + B2 - B1) * 1000 * 0.003 - ABuyP1) - ABuy) / ABuy
  44.         Cells(i, "M") = (((K + B2 - B1) * 1000 - (K + B2 - B1) * 1000 * 0.003 - ABuyP1) - ABuy) '計算獲利扣除手續費與證交稅的獲利金額
  45. Next


  46. End Sub
複製代碼
學習才能提升自己

TOP

回復 10# GBKEE


    G大大~ 用VBA來帶出函數亦是很好的一招~
    只要將公式列出直接套用~
    再去推導出新股價的價格~
    蠻值得學習的~
學習才能提升自己

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題